diff options
author | NIIBE Yutaka <[email protected]> | 2014-04-08 03:15:20 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2014-04-08 03:15:20 +0000 |
commit | 5ff6d0c25e6d0f422b17809b954e9e87cb137347 (patch) | |
tree | 984819417b529f71a77618dcdf4a5afaa988f9e5 /agent/pksign.c | |
parent | g10: EdDSA support. (diff) | |
download | gnupg-5ff6d0c25e6d0f422b17809b954e9e87cb137347.tar.gz gnupg-5ff6d0c25e6d0f422b17809b954e9e87cb137347.zip |
agent: Support EdDSA.
* agent/pksign.c (agent_pksign_do): Handle EdDSA signature.
Diffstat (limited to 'agent/pksign.c')
-rw-r--r-- | agent/pksign.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/agent/pksign.c b/agent/pksign.c index fb593a6e2..713c8ba79 100644 --- a/agent/pksign.c +++ b/agent/pksign.c @@ -324,12 +324,18 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce, int key_type; int is_RSA = 0; int is_ECDSA = 0; + int is_EdDSA = 0; - key_type = agent_is_dsa_key (s_skey); - if (key_type == 0) - is_RSA = 1; - else if (key_type == GCRY_PK_ECDSA) - is_ECDSA = 1; + if (agent_is_eddsa_key (s_skey)) + is_EdDSA = 1; + else + { + key_type = agent_is_dsa_key (s_skey); + if (key_type == 0) + is_RSA = 1; + else if (key_type == GCRY_PK_ECDSA) + is_ECDSA = 1; + } rc = divert_pksign (ctrl, data, datalen, @@ -356,6 +362,11 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce, rc = gcry_sexp_build (&s_sig, NULL, "(sig-val(rsa(s%b)))", len, buf); } + else if (is_EdDSA) + { + rc = gcry_sexp_build (&s_sig, NULL, "(sig-val(eddsa(r%b)(s%b)))", + len/2, buf, len/2, buf + len/2); + } else if (is_ECDSA) { unsigned char *r_buf_allocated = NULL; |