mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
agent:kem:ecc: Support a key on smartcard.
* agent/agent.h (agent_card_ecc_kem): New. * agent/divert-scd.c (agent_card_ecc_kem): New. * agent/pkdecrypt.c (ecc_extract_pk_from_key): New. (ecc_extract_sk_from_key): New. (ecc_raw_kem, get_cardkey, ecc_get_curve): New. (ecc_pgp_kem_decrypt): Support a key on smartcard for ECC. (composite_pgp_kem_decrypt): Handle a case of a key on smartcard. * common/sexputil.c (get_ecc_curve_from_key): New. * common/util.h (get_ecc_curve_from_key): New. -- GnuPG-bug-id: 7097 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
83e2dede0a
commit
9128d81bb7
5 changed files with 288 additions and 74 deletions
|
@ -1194,3 +1194,47 @@ cipher_mode_to_string (int mode)
|
|||
default: return "[?]";
|
||||
}
|
||||
}
|
||||
|
||||
/* Return the cannonical name of the ECC curve in KEY. */
|
||||
const char *
|
||||
get_ecc_curve_from_key (gcry_sexp_t key)
|
||||
{
|
||||
gcry_sexp_t list = NULL;
|
||||
gcry_sexp_t l2 = NULL;
|
||||
const char *curve_name = NULL;
|
||||
char *name = NULL;
|
||||
|
||||
/* Check that the first element is valid. */
|
||||
list = gcry_sexp_find_token (key, "public-key", 0);
|
||||
if (!list)
|
||||
list = gcry_sexp_find_token (key, "private-key", 0);
|
||||
if (!list)
|
||||
list = gcry_sexp_find_token (key, "protected-private-key", 0);
|
||||
if (!list)
|
||||
list = gcry_sexp_find_token (key, "shadowed-private-key", 0);
|
||||
if (!list)
|
||||
goto leave;
|
||||
|
||||
l2 = gcry_sexp_cadr (list);
|
||||
gcry_sexp_release (list);
|
||||
list = l2;
|
||||
l2 = NULL;
|
||||
|
||||
name = gcry_sexp_nth_string (list, 0);
|
||||
if (!name)
|
||||
goto leave;
|
||||
|
||||
if (gcry_pk_map_name (name) != GCRY_PK_ECC)
|
||||
goto leave;
|
||||
|
||||
l2 = gcry_sexp_find_token (list, "curve", 0);
|
||||
xfree (name);
|
||||
name = gcry_sexp_nth_string (l2, 1);
|
||||
curve_name = openpgp_oid_or_name_to_curve (name, 1);
|
||||
gcry_sexp_release (l2);
|
||||
|
||||
leave:
|
||||
xfree (name);
|
||||
gcry_sexp_release (list);
|
||||
return curve_name;
|
||||
}
|
||||
|
|
|
@ -196,6 +196,7 @@ char *pubkey_algo_string (gcry_sexp_t s_pkey, enum gcry_pk_algos *r_algoid);
|
|||
const char *pubkey_algo_to_string (int algo);
|
||||
const char *hash_algo_to_string (int algo);
|
||||
const char *cipher_mode_to_string (int mode);
|
||||
const char *get_ecc_curve_from_key (gcry_sexp_t key);
|
||||
|
||||
/*-- convert.c --*/
|
||||
int hex2bin (const char *string, void *buffer, size_t length);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue