diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/conversion.c | 1 | ||||
| -rw-r--r-- | src/data-mem.c | 3 | ||||
| -rw-r--r-- | src/gpgme.c | 81 | ||||
| -rw-r--r-- | src/gpgme.def | 2 | ||||
| -rw-r--r-- | src/gpgme.h.in | 10 | ||||
| -rw-r--r-- | src/libgpgme.vers | 2 | 
6 files changed, 70 insertions, 29 deletions
| diff --git a/src/conversion.c b/src/conversion.c index d04a6bef..0992225b 100644 --- a/src/conversion.c +++ b/src/conversion.c @@ -427,6 +427,7 @@ _gpgme_map_pk_algo (int algo, gpgme_protocol_t protocol)          case 18: algo = GPGME_PK_ECDH; break;          case 19: algo = GPGME_PK_ECDSA; break;          case 20: break; +        case 22: algo = GPGME_PK_EDDSA; break;          default: algo = 0; break; /* Unknown.  */          }      } diff --git a/src/data-mem.c b/src/data-mem.c index e06a920c..a498b826 100644 --- a/src/data-mem.c +++ b/src/data-mem.c @@ -271,7 +271,8 @@ gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len)  } -/* Release the memory returned by gpgme_data_release_and_get_mem().  */ +/* Release the memory returned by gpgme_data_release_and_get_mem() and +   some other functions.  */  void  gpgme_free (void *buffer)  { diff --git a/src/gpgme.c b/src/gpgme.c index 0cf999a7..343e7752 100644 --- a/src/gpgme.c +++ b/src/gpgme.c @@ -1,7 +1,7 @@  /* gpgme.c - GnuPG Made Easy.     Copyright (C) 2000 Werner Koch (dd9jn)     Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2012, -                 2014 g10 Code GmbH +                 2014, 2015 g10 Code GmbH     This file is part of GPGME. @@ -994,41 +994,70 @@ gpgme_sig_notation_get (gpgme_ctx_t ctx)    return ctx->sig_notations;  } + -const char * -gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo) +/* Return a public key algorithm string made of the algorithm and size +   or the curve name.  May return NULL on error.  Caller must free the +   result using gpgme_free.  */ +char * +gpgme_pubkey_algo_string (gpgme_subkey_t subkey)  { -  switch (algo) +  const char *prefix = NULL; +  char *result; + +  if (!subkey)      { -    case GPGME_PK_RSA: -      return "RSA"; +      gpg_err_set_errno (EINVAL); +      return NULL; +    } +  switch (subkey->pubkey_algo) +    { +    case GPGME_PK_RSA:      case GPGME_PK_RSA_E: -      return "RSA-E"; - -    case GPGME_PK_RSA_S: -      return "RSA-S"; - -    case GPGME_PK_ELG_E: -      return "ELG-E"; - -    case GPGME_PK_DSA: -      return "DSA"; - +    case GPGME_PK_RSA_S: prefix = "rsa"; break; +    case GPGME_PK_ELG_E: prefix = "elg"; break; +    case GPGME_PK_DSA:	 prefix = "dsa"; break; +    case GPGME_PK_ELG:   prefix = "xxx"; break;      case GPGME_PK_ECC: -      return "ECC"; +    case GPGME_PK_ECDH: +    case GPGME_PK_ECDSA: +    case GPGME_PK_EDDSA: prefix = "";    break; +    } -    case GPGME_PK_ELG: -      return "ELG"; +  if (prefix && *prefix) +    { +      char buffer[40]; +      snprintf (buffer, sizeof buffer, "%s%u", prefix, subkey->length); +      result = strdup (buffer); +    } +  else if (prefix && subkey->curve && *subkey->curve) +    result = strdup (subkey->curve); +  else if (prefix) +    result =  strdup ("E_error"); +  else +    result = strdup  ("unknown"); -    case GPGME_PK_ECDSA: -      return "ECDSA"; +  return result; +} -    case GPGME_PK_ECDH: -      return "ECDH"; -    default: -      return NULL; +const char * +gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo) +{ +  switch (algo) +    { +    case GPGME_PK_RSA:   return "RSA"; +    case GPGME_PK_RSA_E: return "RSA-E"; +    case GPGME_PK_RSA_S: return "RSA-S"; +    case GPGME_PK_ELG_E: return "ELG-E"; +    case GPGME_PK_DSA:   return "DSA"; +    case GPGME_PK_ECC:   return "ECC"; +    case GPGME_PK_ELG:   return "ELG"; +    case GPGME_PK_ECDSA: return "ECDSA"; +    case GPGME_PK_ECDH:  return "ECDH"; +    case GPGME_PK_EDDSA: return "EdDSA"; +    default:             return NULL;      }  } diff --git a/src/gpgme.def b/src/gpgme.def index a3f5fb4a..3b56aaad 100644 --- a/src/gpgme.def +++ b/src/gpgme.def @@ -223,5 +223,7 @@ EXPORTS      gpgme_set_status_cb                   @167      gpgme_get_status_cb                   @168 + +    gpgme_pubkey_algo_string              @169  ; END diff --git a/src/gpgme.h.in b/src/gpgme.h.in index 6cea2c77..e7216cbe 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -261,7 +261,8 @@ typedef enum      GPGME_PK_ECC   = 18,      GPGME_PK_ELG   = 20,      GPGME_PK_ECDSA = 301, -    GPGME_PK_ECDH  = 302 +    GPGME_PK_ECDH  = 302, +    GPGME_PK_EDDSA = 303    }  gpgme_pubkey_algo_t; @@ -1218,7 +1219,8 @@ gpgme_error_t gpgme_data_new_from_mem (gpgme_data_t *r_dh,     size is returned in R_LEN.  */  char *gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len); -/* Release the memory returned by gpgme_data_release_and_get_mem().  */ +/* Release the memory returned by gpgme_data_release_and_get_mem() and +   some other functions.  */  void gpgme_free (void *buffer);  gpgme_error_t gpgme_data_new_from_cbs (gpgme_data_t *dh, @@ -2232,6 +2234,10 @@ gpgme_error_t gpgme_engine_check_version (gpgme_protocol_t proto);  void gpgme_result_ref (void *result);  void gpgme_result_unref (void *result); +/* Return a public key algorithm string (e.g. "rsa2048").  Caller must +   free using gpgme_free.  */ +char *gpgme_pubkey_algo_string (gpgme_subkey_t subkey); +  /* Return a statically allocated string with the name of the public     key algorithm ALGO, or NULL if that name is not known.  */  const char *gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo); diff --git a/src/libgpgme.vers b/src/libgpgme.vers index 6687571f..c677190f 100644 --- a/src/libgpgme.vers +++ b/src/libgpgme.vers @@ -98,6 +98,8 @@ GPGME_1.1 {      gpgme_set_status_cb;      gpgme_get_status_cb; + +    gpgme_pubkey_algo_string;  }; | 
