aboutsummaryrefslogtreecommitdiffstats
path: root/agent/pksign.c
diff options
context:
space:
mode:
Diffstat (limited to 'agent/pksign.c')
-rw-r--r--agent/pksign.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/agent/pksign.c b/agent/pksign.c
index 4d0a240e9..088615011 100644
--- a/agent/pksign.c
+++ b/agent/pksign.c
@@ -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,