changeset 1913:38c6fd7d7a82

Fix dropbearconvert ecdsa parsing error typo Simplify handling for different key types
author Matt Johnston <matt@ucc.asn.au>
date Tue, 29 Mar 2022 23:55:35 +0800
parents 8b4274d34fe8
children f978a15194ba
files keyimport.c
diffstat 1 files changed, 21 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/keyimport.c	Tue Mar 29 23:47:30 2022 +0800
+++ b/keyimport.c	Tue Mar 29 23:55:35 2022 +0800
@@ -601,51 +601,35 @@
 		/* discard checkkey2 */
 		buf_getint(blobbuf);
 
-		if (type != DROPBEAR_SIGNKEY_NONE) {
-			retkey->type = type;
+		errmsg = "Unsupported OpenSSH key type";
+		retkey->type = type;
+		ret = DROPBEAR_FAILURE;
+		/* Parse private key part */
 #if DROPBEAR_RSA
-			if (type == DROPBEAR_SIGNKEY_RSA) {
-				if (buf_get_rsa_priv_ossh(blobbuf, retkey)
-						== DROPBEAR_SUCCESS) {
-					errmsg = NULL;
-					retval = retkey;
-					goto error;
-				} else {
-					errmsg = "Error parsing OpenSSH RSA key";
-					goto ossh_error;
-				}
-			}
+		if (type == DROPBEAR_SIGNKEY_RSA) {
+			errmsg = "Error parsing OpenSSH RSA key";
+			ret = buf_get_rsa_priv_ossh(blobbuf, retkey);
+		}
 #endif
 #if DROPBEAR_ED25519
-			if (type == DROPBEAR_SIGNKEY_ED25519) {
-				if (buf_get_ed25519_priv_ossh(blobbuf, retkey)
-						== DROPBEAR_SUCCESS) {
-					errmsg = NULL;
-					retval = retkey;
-					goto error;
-				} else {
-					errmsg = "Error parsing OpenSSH ed25519 key";
-					goto ossh_error;
-				}
-			}
+		if (type == DROPBEAR_SIGNKEY_ED25519) {
+			errmsg = "Error parsing OpenSSH ed25519 key";
+			ret = buf_get_ed25519_priv_ossh(blobbuf, retkey);
+		}
 #endif
 #if DROPBEAR_ECDSA
-			if (signkey_is_ecdsa(type)) {
-				if (buf_get_ecdsa_priv_ossh(blobbuf, retkey)
-						== DROPBEAR_SUCCESS) {
-					errmsg = NULL;
-					retval = retkey;
-					goto error;
-				} else {
-					errmsg = "Error parsing OpenSSH ed25519 key";
-					goto ossh_error;
-				}
-			}
+		if (signkey_is_ecdsa(type)) {
+			errmsg = "Error parsing OpenSSH ecdsa key";
+			ret = buf_get_ecdsa_priv_ossh(blobbuf, retkey);
+		}
 #endif
+		if (ret == DROPBEAR_SUCCESS) {
+				errmsg = NULL;
+				retval = retkey;
+				goto error;
 		}
 
-		errmsg = "Unsupported OpenSSH key type";
-		ossh_error:
+ossh_error:
 		sign_key_free(retkey);
 		retkey = NULL;
 		goto error;