From 2cf2ca7bb9741ac86e8aa92d8f03b1c5f5938897 Mon Sep 17 00:00:00 2001
From: Werner Koch <wk@gnupg.org>
Date: Thu, 28 Jan 2016 17:33:51 +0100
Subject: 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>
---
 src/libgcrypt.def | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'src/libgcrypt.def')

diff --git a/src/libgcrypt.def b/src/libgcrypt.def
index f3e074bd..067cb843 100644
--- a/src/libgcrypt.def
+++ b/src/libgcrypt.def
@@ -280,4 +280,6 @@ EXPORTS
 
       gcry_md_extract           @245
 
+      gcry_mpi_ec_decode_point  @246
+
 ;; end of file with public symbols for Windows.
-- 
cgit v1.2.1

