summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/cipher-proto.h9
-rw-r--r--src/gcrypt.h.in4
-rw-r--r--src/libgcrypt.def5
-rw-r--r--src/libgcrypt.vers1
-rw-r--r--src/visibility.c13
-rw-r--r--src/visibility.h3
7 files changed, 36 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index f2fbb327..b59f1c19 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2011-02-01 Werner Koch <wk@g10code.com>
+
+ * libgcrypt.vers (gcry_pk_get_curve): Add.
+ * libgcrypt.def (gcry_pk_get_curve): Add.
+ * visibility.c (gcry_pk_get_curve): New.
+ * cipher-proto.h (pk_extra_spec): Add field GET_CURVE.
+
2011-01-31 Werner Koch <wk@g10code.com>
* sexp.c (vsexp_sscan): Allow opaque MPIs in "%m".
diff --git a/src/cipher-proto.h b/src/cipher-proto.h
index 21532367..ea7a70de 100644
--- a/src/cipher-proto.h
+++ b/src/cipher-proto.h
@@ -1,5 +1,5 @@
/* cipher-proto.h - Internal declarations
- * Copyright (C) 2008 Free Software Foundation, Inc.
+ * Copyright (C) 2008, 2011 Free Software Foundation, Inc.
*
* This file is part of Libgcrypt.
*
@@ -53,10 +53,14 @@ typedef gcry_err_code_t (*pk_ext_generate_t)
typedef gpg_err_code_t (*pk_comp_keygrip_t)
(gcry_md_hd_t md, gcry_sexp_t keyparm);
-/* The type used to quert ECC curve parameters. */
+/* The type used to query ECC curve parameters. */
typedef gcry_err_code_t (*pk_get_param_t)
(const char *name, gcry_mpi_t *pkey);
+/* The type used to query an ECC curve name. */
+typedef const char *(*pk_get_curve_t)(gcry_mpi_t *pkey, int iterator,
+ unsigned int *r_nbits);
+
/* The type used to convey additional information to a cipher. */
typedef gpg_err_code_t (*cipher_set_extra_info_t)
(void *c, int what, const void *buffer, size_t buflen);
@@ -82,6 +86,7 @@ typedef struct pk_extra_spec
pk_ext_generate_t ext_generate;
pk_comp_keygrip_t comp_keygrip;
pk_get_param_t get_param;
+ pk_get_curve_t get_curve;
} pk_extra_spec_t;
diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in
index 9c58b989..25099788 100644
--- a/src/gcrypt.h.in
+++ b/src/gcrypt.h.in
@@ -1037,6 +1037,10 @@ unsigned int gcry_pk_get_nbits (gcry_sexp_t key) _GCRY_GCC_ATTR_PURE;
used without contacting the author. */
unsigned char *gcry_pk_get_keygrip (gcry_sexp_t key, unsigned char *array);
+/* Return the name of the curve matching KEY. */
+const char *gcry_pk_get_curve (gcry_sexp_t key, int iterator,
+ unsigned int *r_nbits);
+
/* Return 0 if the public key algorithm A is available for use. */
#define gcry_pk_test_algo(a) \
gcry_pk_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL )
diff --git a/src/libgcrypt.def b/src/libgcrypt.def
index 8fc4d329..55ff8775 100644
--- a/src/libgcrypt.def
+++ b/src/libgcrypt.def
@@ -230,8 +230,7 @@ EXPORTS
gcry_cipher_setkey @188
gcry_cipher_setiv @189
gcry_cipher_setctr @190
-
- gcry_mpi_lshift @191
-
+ gcry_mpi_lshift @191
+ gcry_pk_get_curve @192
diff --git a/src/libgcrypt.vers b/src/libgcrypt.vers
index ef9fcee1..46704365 100644
--- a/src/libgcrypt.vers
+++ b/src/libgcrypt.vers
@@ -57,6 +57,7 @@ GCRYPT_1.2 {
gcry_pk_get_keygrip; gcry_pk_get_nbits; gcry_pk_list;
gcry_pk_map_name; gcry_pk_register; gcry_pk_sign;
gcry_pk_testkey; gcry_pk_unregister; gcry_pk_verify;
+ gcry_pk_get_curve;
gcry_ac_data_new; gcry_ac_data_destroy; gcry_ac_data_copy;
gcry_ac_data_length; gcry_ac_data_clear; gcry_ac_data_set;
diff --git a/src/visibility.c b/src/visibility.c
index f187a65e..fe6d9bdd 100644
--- a/src/visibility.c
+++ b/src/visibility.c
@@ -1,5 +1,5 @@
/* visibility.c - Wrapper for all public functions.
- * Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+ * Copyright (C) 2007, 2008, 2011 Free Software Foundation, Inc.
*
* This file is part of Libgcrypt.
*
@@ -737,6 +737,17 @@ gcry_pk_get_keygrip (gcry_sexp_t key, unsigned char *array)
return _gcry_pk_get_keygrip (key, array);
}
+const char *
+gcry_pk_get_curve (gcry_sexp_t key, int iterator, unsigned int *r_nbits)
+{
+ if (!fips_is_operational ())
+ {
+ (void)fips_not_operational ();
+ return NULL;
+ }
+ return _gcry_pk_get_curve (key, iterator, r_nbits);
+}
+
gcry_error_t
gcry_pk_list (int *list, int *list_length)
{
diff --git a/src/visibility.h b/src/visibility.h
index a11e5474..0b0219d3 100644
--- a/src/visibility.h
+++ b/src/visibility.h
@@ -103,6 +103,7 @@
#define gcry_pk_encrypt _gcry_pk_encrypt
#define gcry_pk_genkey _gcry_pk_genkey
#define gcry_pk_get_keygrip _gcry_pk_get_keygrip
+#define gcry_pk_get_curve _gcry_pk_get_curve
#define gcry_pk_get_nbits _gcry_pk_get_nbits
#define gcry_pk_list _gcry_pk_list
#define gcry_pk_map_name _gcry_pk_map_name
@@ -358,6 +359,7 @@ void gcry_ac_os_to_mpi (gcry_mpi_t mpi, unsigned char *os, size_t os_n);
#undef gcry_pk_encrypt
#undef gcry_pk_genkey
#undef gcry_pk_get_keygrip
+#undef gcry_pk_get_curve
#undef gcry_pk_get_nbits
#undef gcry_pk_list
#undef gcry_pk_map_name
@@ -568,6 +570,7 @@ MARK_VISIBLE (gcry_pk_decrypt)
MARK_VISIBLE (gcry_pk_encrypt)
MARK_VISIBLE (gcry_pk_genkey)
MARK_VISIBLE (gcry_pk_get_keygrip)
+MARK_VISIBLE (gcry_pk_get_curve)
MARK_VISIBLE (gcry_pk_get_nbits)
MARK_VISIBLE (gcry_pk_list)
MARK_VISIBLE (gcry_pk_map_name)