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_]
|
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]
|
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
|
This value indicates ECDH, the Eliptic Curve Diffie-Hellmann
|
||||||
encryption algorithm as defined by RFC-6637.
|
encryption algorithm as defined by RFC-6637.
|
||||||
|
|
||||||
|
@item GPGME_PK_EDDSA
|
||||||
|
This value indicates the EdDSA algorithm.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
@ -1174,6 +1177,14 @@ If @var{algo} is not a valid public key algorithm, @code{NULL} is
|
|||||||
returned.
|
returned.
|
||||||
@end deftypefun
|
@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
|
@node Hash Algorithms
|
||||||
@section 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}})
|
@deftypefun void gpgme_free (@w{void *@var{buffer}})
|
||||||
The function @code{gpgme_free} releases the memory returned by
|
The function @code{gpgme_free} releases the memory returned by
|
||||||
@code{gpgme_data_release_and_get_mem}. It should be used instead of
|
@code{gpgme_data_release_and_get_mem} and
|
||||||
the system libraries @code{free} function in case different allocators
|
@code{gpgme_pubkey_algo_string}. It should be used instead of the
|
||||||
are used in a single program.
|
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
|
@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}.
|
The serial number of a smart card holding this key or @code{NULL}.
|
||||||
|
|
||||||
@item char *curve
|
@item char *curve
|
||||||
For ECC algoritms the name of the curve.
|
For ECC algorithms the name of the curve.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
@ -427,6 +427,7 @@ _gpgme_map_pk_algo (int algo, gpgme_protocol_t protocol)
|
|||||||
case 18: algo = GPGME_PK_ECDH; break;
|
case 18: algo = GPGME_PK_ECDH; break;
|
||||||
case 19: algo = GPGME_PK_ECDSA; break;
|
case 19: algo = GPGME_PK_ECDSA; break;
|
||||||
case 20: break;
|
case 20: break;
|
||||||
|
case 22: algo = GPGME_PK_EDDSA; break;
|
||||||
default: algo = 0; break; /* Unknown. */
|
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
|
void
|
||||||
gpgme_free (void *buffer)
|
gpgme_free (void *buffer)
|
||||||
{
|
{
|
||||||
|
89
src/gpgme.c
89
src/gpgme.c
@ -1,7 +1,7 @@
|
|||||||
/* gpgme.c - GnuPG Made Easy.
|
/* gpgme.c - GnuPG Made Easy.
|
||||||
Copyright (C) 2000 Werner Koch (dd9jn)
|
Copyright (C) 2000 Werner Koch (dd9jn)
|
||||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2012,
|
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2012,
|
||||||
2014 g10 Code GmbH
|
2014, 2015 g10 Code GmbH
|
||||||
|
|
||||||
This file is part of GPGME.
|
This file is part of GPGME.
|
||||||
|
|
||||||
@ -994,41 +994,70 @@ gpgme_sig_notation_get (gpgme_ctx_t ctx)
|
|||||||
return ctx->sig_notations;
|
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 *
|
const char *
|
||||||
gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo)
|
gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo)
|
||||||
{
|
{
|
||||||
switch (algo)
|
switch (algo)
|
||||||
{
|
{
|
||||||
case GPGME_PK_RSA:
|
case GPGME_PK_RSA: return "RSA";
|
||||||
return "RSA";
|
case GPGME_PK_RSA_E: return "RSA-E";
|
||||||
|
case GPGME_PK_RSA_S: return "RSA-S";
|
||||||
case GPGME_PK_RSA_E:
|
case GPGME_PK_ELG_E: return "ELG-E";
|
||||||
return "RSA-E";
|
case GPGME_PK_DSA: return "DSA";
|
||||||
|
case GPGME_PK_ECC: return "ECC";
|
||||||
case GPGME_PK_RSA_S:
|
case GPGME_PK_ELG: return "ELG";
|
||||||
return "RSA-S";
|
case GPGME_PK_ECDSA: return "ECDSA";
|
||||||
|
case GPGME_PK_ECDH: return "ECDH";
|
||||||
case GPGME_PK_ELG_E:
|
case GPGME_PK_EDDSA: return "EdDSA";
|
||||||
return "ELG-E";
|
default: return NULL;
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,5 +223,7 @@ EXPORTS
|
|||||||
|
|
||||||
gpgme_set_status_cb @167
|
gpgme_set_status_cb @167
|
||||||
gpgme_get_status_cb @168
|
gpgme_get_status_cb @168
|
||||||
|
|
||||||
|
gpgme_pubkey_algo_string @169
|
||||||
; END
|
; END
|
||||||
|
|
||||||
|
@ -261,7 +261,8 @@ typedef enum
|
|||||||
GPGME_PK_ECC = 18,
|
GPGME_PK_ECC = 18,
|
||||||
GPGME_PK_ELG = 20,
|
GPGME_PK_ELG = 20,
|
||||||
GPGME_PK_ECDSA = 301,
|
GPGME_PK_ECDSA = 301,
|
||||||
GPGME_PK_ECDH = 302
|
GPGME_PK_ECDH = 302,
|
||||||
|
GPGME_PK_EDDSA = 303
|
||||||
}
|
}
|
||||||
gpgme_pubkey_algo_t;
|
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. */
|
size is returned in R_LEN. */
|
||||||
char *gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *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);
|
void gpgme_free (void *buffer);
|
||||||
|
|
||||||
gpgme_error_t gpgme_data_new_from_cbs (gpgme_data_t *dh,
|
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_ref (void *result);
|
||||||
void gpgme_result_unref (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
|
/* Return a statically allocated string with the name of the public
|
||||||
key algorithm ALGO, or NULL if that name is not known. */
|
key algorithm ALGO, or NULL if that name is not known. */
|
||||||
const char *gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo);
|
const char *gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo);
|
||||||
|
@ -98,6 +98,8 @@ GPGME_1.1 {
|
|||||||
|
|
||||||
gpgme_set_status_cb;
|
gpgme_set_status_cb;
|
||||||
gpgme_get_status_cb;
|
gpgme_get_status_cb;
|
||||||
|
|
||||||
|
gpgme_pubkey_algo_string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user