mpi: Add internal convenience function.
authorWerner Koch <wk@gnupg.org>
Sat, 7 Sep 2013 08:06:46 +0000 (10:06 +0200)
committerWerner Koch <wk@gnupg.org>
Mon, 16 Sep 2013 12:42:37 +0000 (14:42 +0200)
* mpi/mpiutil.c (_gcry_mpi_get_opaque_copy): New.

Signed-off-by: Werner Koch <wk@gnupg.org>
mpi/mpiutil.c
src/mpi.h

index 433dda6..57fe72a 100644 (file)
@@ -291,6 +291,22 @@ gcry_mpi_get_opaque( gcry_mpi_t a, unsigned int *nbits )
 }
 
 
+void *
+_gcry_mpi_get_opaque_copy (gcry_mpi_t a, unsigned int *nbits)
+{
+  const void *s;
+  void *d;
+  unsigned int n;
+
+  s = gcry_mpi_get_opaque (a, nbits);
+  if (!s && nbits)
+    return NULL;
+  n = (*nbits+7)/8;
+  d = gcry_is_secure (s)? gcry_malloc_secure (n) : gcry_malloc (n);
+  memcpy (d, s, n);
+  return d;
+}
+
 /****************
  * Note: This copy function should not interpret the MPI
  *      but copy it transparently.
index 52341fb..bf731a3 100644 (file)
--- a/src/mpi.h
+++ b/src/mpi.h
@@ -134,6 +134,7 @@ void _gcry_mpi_m_check( gcry_mpi_t a );
 void _gcry_mpi_swap( gcry_mpi_t a, gcry_mpi_t b);
 gcry_mpi_t _gcry_mpi_new (unsigned int nbits);
 gcry_mpi_t _gcry_mpi_snew (unsigned int nbits);
+void *_gcry_mpi_get_opaque_copy (gcry_mpi_t a, unsigned int *nbits);
 int _gcry_mpi_is_neg (gcry_mpi_t a);
 void _gcry_mpi_neg (gcry_mpi_t w, gcry_mpi_t u);
 void _gcry_mpi_abs (gcry_mpi_t w);