mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
agent: API change of agent_key_from_file.
* agent/findkey.c (agent_key_from_file): Always return S-expression. * agent/command.c (cmd_passwd): Distinguish by SHADOW_INFO. (cmd_export_key): Likewise. Free SHADOW_INFO. (cmd_keytocard): Likewise. Release S_SKEY. * agent/pkdecrypt.c (agent_pkdecrypt): Likewise. * agent/pksign.c (agent_pksign_do): Likewise. Use the S-expression to know the key type. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
57d26f39af
commit
ac5a1a3ccb
4 changed files with 30 additions and 35 deletions
|
@ -299,31 +299,20 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce,
|
|||
goto leave;
|
||||
}
|
||||
|
||||
if (!s_skey)
|
||||
if (shadow_info)
|
||||
{
|
||||
/* Divert operation to the smartcard */
|
||||
gcry_sexp_t s_pkey, l;
|
||||
const char *name;
|
||||
size_t len;
|
||||
unsigned char *buf = NULL;
|
||||
int key_type;
|
||||
int is_RSA = 0;
|
||||
int is_ECDSA = 0;
|
||||
|
||||
/* Check keytype by public key */
|
||||
rc = agent_public_key_from_file (ctrl, ctrl->keygrip, &s_pkey);
|
||||
if (rc)
|
||||
{
|
||||
log_error ("failed to read the public key\n");
|
||||
goto leave;
|
||||
}
|
||||
l = gcry_sexp_cadr (s_pkey);
|
||||
name = gcry_sexp_nth_data (l, 0, &len);
|
||||
if (len == 3 && !memcmp (name, "rsa", 3))
|
||||
key_type = agent_is_dsa_key (s_skey);
|
||||
if (key_type == 0)
|
||||
is_RSA = 1;
|
||||
else if (len == 5 && !memcmp (name, "ecdsa", 5))
|
||||
else if (key_type == GCRY_PK_ECDSA)
|
||||
is_ECDSA = 1;
|
||||
gcry_sexp_release (l);
|
||||
gcry_sexp_release (s_pkey);
|
||||
|
||||
rc = divert_pksign (ctrl,
|
||||
ctrl->digest.value,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue