aboutsummaryrefslogtreecommitdiff
path: root/src/pki_crypto.c
diff options
context:
space:
mode:
authorAnderson Toshiyuki Sasaki <ansasaki@redhat.com>2019-04-25 15:57:00 +0200
committerAndreas Schneider <asn@cryptomilk.org>2019-05-13 16:37:51 +0200
commit20c03c289e59d32a2e0f2b61aea5b15ab4900579 (patch)
treed13f3050813b73a15e13247f714f05dac0af8c47 /src/pki_crypto.c
parentc27d41df75e4a2a47b3cfd91601e531386352147 (diff)
downloadlibssh-20c03c289e59d32a2e0f2b61aea5b15ab4900579.tar.gz
libssh-20c03c289e59d32a2e0f2b61aea5b15ab4900579.tar.xz
libssh-20c03c289e59d32a2e0f2b61aea5b15ab4900579.zip
pki_crypto: Refactor pki_signature_to_blob()
Refactor pki_signature_to_blob() without behaviour changes. Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/pki_crypto.c')
-rw-r--r--src/pki_crypto.c100
1 files changed, 54 insertions, 46 deletions
diff --git a/src/pki_crypto.c b/src/pki_crypto.c
index 0fcdd1a9..2290a693 100644
--- a/src/pki_crypto.c
+++ b/src/pki_crypto.c
@@ -1472,6 +1472,59 @@ static ssh_string pki_dsa_signature_to_blob(const ssh_signature sig)
return sig_blob;
}
+static ssh_string pki_ecdsa_signature_to_blob(const ssh_signature sig)
+{
+ ssh_string r;
+ ssh_string s;
+
+ ssh_buffer buf = NULL;
+ ssh_string sig_blob = NULL;
+
+ const BIGNUM *pr, *ps;
+
+ int rc;
+
+ buf = ssh_buffer_new();
+ if (buf == NULL) {
+ goto error;
+ }
+
+ ECDSA_SIG_get0(sig->ecdsa_sig, &pr, &ps);
+ r = ssh_make_bignum_string((BIGNUM *)pr);
+ if (r == NULL) {
+ goto error;
+ }
+ rc = ssh_buffer_add_ssh_string(buf, r);
+ ssh_string_free(r);
+ if (rc < 0) {
+ goto error;
+ }
+
+ s = ssh_make_bignum_string((BIGNUM *)ps);
+ if (s == NULL) {
+ goto error;
+ }
+ rc = ssh_buffer_add_ssh_string(buf, s);
+ ssh_string_free(s);
+ if (rc < 0) {
+ goto error;
+ }
+
+ sig_blob = ssh_string_new(ssh_buffer_get_len(buf));
+ if (sig_blob == NULL) {
+ goto error;
+ }
+
+ ssh_string_fill(sig_blob, ssh_buffer_get(buf), ssh_buffer_get_len(buf));
+ ssh_buffer_free(buf);
+
+ return sig_blob;
+
+error:
+ ssh_buffer_free(buf);
+ return NULL;
+}
+
ssh_string pki_signature_to_blob(const ssh_signature sig)
{
ssh_string sig_blob = NULL;
@@ -1488,53 +1541,8 @@ ssh_string pki_signature_to_blob(const ssh_signature sig)
case SSH_KEYTYPE_ECDSA_P384:
case SSH_KEYTYPE_ECDSA_P521:
#ifdef HAVE_OPENSSL_ECC
- {
- ssh_string r;
- ssh_string s;
- ssh_buffer b;
- int rc;
- const BIGNUM *pr, *ps;
-
- b = ssh_buffer_new();
- if (b == NULL) {
- return NULL;
- }
-
- ECDSA_SIG_get0(sig->ecdsa_sig, &pr, &ps);
- r = ssh_make_bignum_string((BIGNUM *)pr);
- if (r == NULL) {
- ssh_buffer_free(b);
- return NULL;
- }
- rc = ssh_buffer_add_ssh_string(b, r);
- ssh_string_free(r);
- if (rc < 0) {
- ssh_buffer_free(b);
- return NULL;
- }
-
- s = ssh_make_bignum_string((BIGNUM *)ps);
- if (s == NULL) {
- ssh_buffer_free(b);
- return NULL;
- }
- rc = ssh_buffer_add_ssh_string(b, s);
- ssh_string_free(s);
- if (rc < 0) {
- ssh_buffer_free(b);
- return NULL;
- }
-
- sig_blob = ssh_string_new(ssh_buffer_get_len(b));
- if (sig_blob == NULL) {
- ssh_buffer_free(b);
- return NULL;
- }
-
- ssh_string_fill(sig_blob, ssh_buffer_get(b), ssh_buffer_get_len(b));
- ssh_buffer_free(b);
+ sig_blob = pki_ecdsa_signature_to_blob(sig);
break;
- }
#endif
case SSH_KEYTYPE_ED25519:
sig_blob = pki_ed25519_sig_to_blob(sig);