diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-12-30 11:06:10 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2012-02-04 18:37:04 +0100 |
commit | 9070b041843f0850f13947f7994264aab263557e (patch) | |
tree | f7bed3309831399c137d807e797e18d1b108e12b /src/pki_crypto.c | |
parent | b309dd8fb72d1deaa16536f6d3391711594bbca5 (diff) | |
download | libssh-9070b041843f0850f13947f7994264aab263557e.tar.gz libssh-9070b041843f0850f13947f7994264aab263557e.tar.xz libssh-9070b041843f0850f13947f7994264aab263557e.zip |
pki: Add ecdsa support for signature_to_blob.
Diffstat (limited to 'src/pki_crypto.c')
-rw-r--r-- | src/pki_crypto.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/pki_crypto.c b/src/pki_crypto.c index e07008cc..981e4102 100644 --- a/src/pki_crypto.c +++ b/src/pki_crypto.c @@ -1003,6 +1003,35 @@ ssh_string pki_signature_to_blob(const ssh_signature sig) sig_blob = ssh_string_copy(sig->rsa_sig); break; case SSH_KEYTYPE_ECDSA: +#ifdef HAVE_OPENSSL_ECC + r = make_bignum_string(sig->ecdsa_sig->r); + if (r == NULL) { + return NULL; + } + s = make_bignum_string(sig->ecdsa_sig->s); + if (s == NULL) { + ssh_string_free(r); + return NULL; + } + + memcpy(buffer, + ((char *)ssh_string_data(r)) + ssh_string_len(r) - 20, + 20); + memcpy(buffer + 20, + ((char *)ssh_string_data(s)) + ssh_string_len(s) - 20, + 20); + + ssh_string_free(r); + ssh_string_free(s); + + sig_blob = ssh_string_new(40); + if (sig_blob == NULL) { + return NULL; + } + + ssh_string_fill(sig_blob, buffer, 40); + break; +#endif case SSH_KEYTYPE_UNKNOWN: ssh_pki_log("Unknown signature key type: %d", sig->type); return NULL; |