diff options
author | Werner Koch <wk@gnupg.org> | 2016-01-28 17:33:51 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2016-01-28 17:34:17 +0100 |
commit | 2cf2ca7bb9741ac86e8aa92d8f03b1c5f5938897 (patch) | |
tree | aa44736804100ba41f1a1b925134dc548a969677 /src/visibility.c | |
parent | 191c2e4fe2dc0e00f61aa44e011a9596887e6ce1 (diff) | |
download | libgcrypt-2cf2ca7bb9741ac86e8aa92d8f03b1c5f5938897.tar.gz |
ecc: New API function gcry_mpi_ec_decode_point.
* mpi/ec.c (_gcry_mpi_ec_decode_point): New.
* cipher/ecc-common.h: Move two prototypes to ...
* src/ec-context.h: here.
* src/gcrypt.h.in (gcry_mpi_ec_decode_point): New.
* src/libgcrypt.def (gcry_mpi_ec_decode_point): New.
* src/libgcrypt.vers (gcry_mpi_ec_decode_point): New.
* src/visibility.c (gcry_mpi_ec_decode_point): New.
* src/visibility.h: Add new function.
--
This new function make the use of the gcry_mpi_ec_curve_point function
possible in many contexts. Here is a code snippet which could be used
in gpg to check a point:
static gpg_error_t
check_point (PKT_public_key *pk, gcry_mpi_t m_point)
{
gpg_error_t err;
char *curve;
gcry_ctx_t gctx = NULL;
gcry_mpi_point_t point = NULL;
/* Get the curve name from the first OpenPGP key parameter. */
curve = openpgp_oid_to_str (pk->pkey[0]);
if (!curve)
{
err = gpg_error_from_syserror ();
goto leave;
}
point = gcry_mpi_point_new (0);
if (!point)
{
err = gpg_error_from_syserror ();
goto leave;
}
err = gcry_mpi_ec_new (&gctx, NULL, curve);
if (err)
goto leave;
err = gcry_mpi_ec_decode_point (point, m_point, gctx);
if (err)
goto leave;
if (!gcry_mpi_ec_curve_point (point, gctx))
err = gpg_error (GPG_ERR_BAD_DATA);
leave:
gcry_ctx_release (gctx);
gcry_mpi_point_release (point);
xfree (curve);
return err;
}
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'src/visibility.c')
-rw-r--r-- | src/visibility.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/visibility.c b/src/visibility.c index 23a2705a..3abbd379 100644 --- a/src/visibility.c +++ b/src/visibility.c @@ -544,6 +544,15 @@ gcry_mpi_ec_set_point (const char *name, gcry_mpi_point_t newvalue, return gpg_error (_gcry_mpi_ec_set_point (name, newvalue, ctx)); } +gpg_error_t +gcry_mpi_ec_decode_point (gcry_mpi_point_t result, gcry_mpi_t value, + gcry_ctx_t ctx) +{ + return gpg_error (_gcry_mpi_ec_decode_point + (result, value, + ctx? _gcry_ctx_get_pointer (ctx, CONTEXT_TYPE_EC) : NULL)); +} + int gcry_mpi_ec_get_affine (gcry_mpi_t x, gcry_mpi_t y, gcry_mpi_point_t point, gcry_ctx_t ctx) |