Add gpgme_pubkey_algo_string
* src/gpgme.h.in (GPGME_PK_EDDSA): New. (gpgme_pubkey_algo_string): New. * src/conversion.c (_gpgme_map_pk_algo): Add new algo. * src/gpgme.c (gpgme_pubkey_algo_string): New. (gpgme_pubkey_algo_name): Reformat. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
c8e7870281
commit
c4b6b35bfa
7
NEWS
7
NEWS
@ -1,6 +1,13 @@
|
||||
Noteworthy changes in version 1.6.1 (unreleased) [C25/A14/R_]
|
||||
------------------------------------------------
|
||||
|
||||
* New function to format a GnuPG style public key algorithm string.
|
||||
|
||||
* Interface changes relative to the 1.6.0 release:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
gpgme_pubkey_algo_string NEW.
|
||||
GPGME_PK_EDDSA NEW.
|
||||
|
||||
|
||||
Noteworthy changes in version 1.6.0 (2015-08-26) [C25/A14/R0]
|
||||
------------------------------------------------
|
||||
|
@ -1161,6 +1161,9 @@ Algorithm as defined by FIPS 186-2 and RFC-6637.
|
||||
This value indicates ECDH, the Eliptic Curve Diffie-Hellmann
|
||||
encryption algorithm as defined by RFC-6637.
|
||||
|
||||
@item GPGME_PK_EDDSA
|
||||
This value indicates the EdDSA algorithm.
|
||||
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@ -1174,6 +1177,14 @@ If @var{algo} is not a valid public key algorithm, @code{NULL} is
|
||||
returned.
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun {char *} gpgme_pubkey_algo_string (@w{gpgme_subkey_t @var{key}})
|
||||
The function @code{gpgme_pubkey_algo_string} is a convenience function
|
||||
to build and return an algorithm string in the same way GnuPG does
|
||||
(e.g. ``rsa2048'' or ``ed25519''). The caller must free the result
|
||||
using @code{gpgme_free}. On error (e.g. invalid argument or memory
|
||||
exhausted), the function returns NULL and sets @code{ERRNO}.
|
||||
@end deftypefun
|
||||
|
||||
|
||||
@node Hash Algorithms
|
||||
@section Hash Algorithms
|
||||
@ -1954,9 +1965,11 @@ case, the data object @var{dh} is destroyed.
|
||||
|
||||
@deftypefun void gpgme_free (@w{void *@var{buffer}})
|
||||
The function @code{gpgme_free} releases the memory returned by
|
||||
@code{gpgme_data_release_and_get_mem}. It should be used instead of
|
||||
the system libraries @code{free} function in case different allocators
|
||||
are used in a single program.
|
||||
@code{gpgme_data_release_and_get_mem} and
|
||||
@code{gpgme_pubkey_algo_string}. It should be used instead of the
|
||||
system libraries @code{free} function in case different allocators are
|
||||
used by a program. This is often the case if gpgme is used under
|
||||
Windows as a DLL.
|
||||
@end deftypefun
|
||||
|
||||
|
||||
@ -2838,7 +2851,7 @@ True if the secret key is stored on a smart card.
|
||||
The serial number of a smart card holding this key or @code{NULL}.
|
||||
|
||||
@item char *curve
|
||||
For ECC algoritms the name of the curve.
|
||||
For ECC algorithms the name of the curve.
|
||||
|
||||
@end table
|
||||
@end deftp
|
||||
|
@ -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. */
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
89
src/gpgme.c
89
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 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)
|
||||
{
|
||||
const char *prefix = NULL;
|
||||
char *result;
|
||||
|
||||
if (!subkey)
|
||||
{
|
||||
gpg_err_set_errno (EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (subkey->pubkey_algo)
|
||||
{
|
||||
case GPGME_PK_RSA:
|
||||
case GPGME_PK_RSA_E:
|
||||
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:
|
||||
case GPGME_PK_ECDH:
|
||||
case GPGME_PK_ECDSA:
|
||||
case GPGME_PK_EDDSA: prefix = ""; break;
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
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";
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -223,5 +223,7 @@ EXPORTS
|
||||
|
||||
gpgme_set_status_cb @167
|
||||
gpgme_get_status_cb @168
|
||||
|
||||
gpgme_pubkey_algo_string @169
|
||||
; END
|
||||
|
||||
|
@ -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);
|
||||
|
@ -98,6 +98,8 @@ GPGME_1.1 {
|
||||
|
||||
gpgme_set_status_cb;
|
||||
gpgme_get_status_cb;
|
||||
|
||||
gpgme_pubkey_algo_string;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user