mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
common: Provide function to get public key algo names in our format.
* tools/card-tool-misc.c (pubkey_algo_string): Move to ... * common/sexputil.c (pubkey_algo_string): here. -- The new gpg format for public key algorithms is useful at other places as well. Thus we make this new function available. Note that the code we use in gpg is not based on s-expressions and thus a new function was required. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
a1cb4a940f
commit
03bf8e967a
4 changed files with 59 additions and 60 deletions
|
@ -77,61 +77,3 @@ hex_to_buffer (const char *string, size_t *r_length)
|
|||
*r_length = n;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Given the public key S_PKEY, return a new buffer with a descriptive
|
||||
* string for its algorithm. This function always returns a string. */
|
||||
char *
|
||||
pubkey_algo_string (gcry_sexp_t s_pkey)
|
||||
{
|
||||
const char *prefix;
|
||||
gcry_sexp_t l1;
|
||||
char *algoname;
|
||||
int algo;
|
||||
char *result;
|
||||
|
||||
l1 = gcry_sexp_find_token (s_pkey, "public-key", 0);
|
||||
if (!l1)
|
||||
return xstrdup ("E_no_key");
|
||||
{
|
||||
gcry_sexp_t l_tmp = gcry_sexp_cadr (l1);
|
||||
gcry_sexp_release (l1);
|
||||
l1 = l_tmp;
|
||||
}
|
||||
algoname = gcry_sexp_nth_string (l1, 0);
|
||||
gcry_sexp_release (l1);
|
||||
if (!algoname)
|
||||
return xstrdup ("E_no_algo");
|
||||
|
||||
algo = gcry_pk_map_name (algoname);
|
||||
switch (algo)
|
||||
{
|
||||
case GCRY_PK_RSA: prefix = "rsa"; break;
|
||||
case GCRY_PK_ELG: prefix = "elg"; break;
|
||||
case GCRY_PK_DSA: prefix = "dsa"; break;
|
||||
case GCRY_PK_ECC: prefix = ""; break;
|
||||
default: prefix = NULL; break;
|
||||
}
|
||||
|
||||
if (prefix && *prefix)
|
||||
result = xasprintf ("%s%u", prefix, gcry_pk_get_nbits (s_pkey));
|
||||
else if (prefix)
|
||||
{
|
||||
const char *curve = gcry_pk_get_curve (s_pkey, 0, NULL);
|
||||
const char *name = openpgp_oid_to_curve
|
||||
(openpgp_curve_to_oid (curve, NULL), 0);
|
||||
|
||||
if (name)
|
||||
result = xstrdup (name);
|
||||
else if (curve)
|
||||
result = xasprintf ("X_%s", curve);
|
||||
else
|
||||
result = xstrdup ("E_unknown");
|
||||
}
|
||||
else
|
||||
result = xasprintf ("X_algo_%d", algo);
|
||||
|
||||
xfree (algoname);
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -192,8 +192,6 @@ gpg_error_t test_get_matching_keys (const char *hexgrip);
|
|||
/*-- card-tool-misc.c --*/
|
||||
key_info_t find_kinfo (card_info_t info, const char *keyref);
|
||||
void *hex_to_buffer (const char *string, size_t *r_length);
|
||||
char *pubkey_algo_string (gcry_sexp_t s_pkey);
|
||||
|
||||
|
||||
/*-- card-call-scd.c --*/
|
||||
void release_card_info (card_info_t info);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue