]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: passphrase depends on kdfname, not ciphername (possible
authormarkus@openbsd.org <markus@openbsd.org>
Fri, 6 Mar 2020 18:21:28 +0000 (18:21 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 13 Mar 2020 02:18:09 +0000 (13:18 +1100)
null-deref); ok djm

OpenBSD-Commit-ID: 0d39668edf5e790b5837df4926ee1141cec5471c

sshkey.c

index 63e568a04b62abadd61dd27ee155305028017656..de57c2ad43c2ca95522e87e5572b12d6ca2b5efa 100644 (file)
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshkey.c,v 1.100 2020/02/26 13:40:09 jsg Exp $ */
+/* $OpenBSD: sshkey.c,v 1.101 2020/03/06 18:21:28 markus Exp $ */
 /*
  * Copyright (c) 2000, 2001 Markus Friedl.  All rights reserved.
  * Copyright (c) 2008 Alexander von Gernler.  All rights reserved.
@@ -4147,20 +4147,20 @@ sshkey_parse_private2(struct sshbuf *blob, int type, const char *passphrase,
                r = SSH_ERR_KEY_UNKNOWN_CIPHER;
                goto out;
        }
-       if ((passphrase == NULL || strlen(passphrase) == 0) &&
-           strcmp(ciphername, "none") != 0) {
-               /* passphrase required */
-               r = SSH_ERR_KEY_WRONG_PASSPHRASE;
-               goto out;
-       }
        if (strcmp(kdfname, "none") != 0 && strcmp(kdfname, "bcrypt") != 0) {
                r = SSH_ERR_KEY_UNKNOWN_CIPHER;
                goto out;
        }
-       if (!strcmp(kdfname, "none") && strcmp(ciphername, "none") != 0) {
+       if (strcmp(kdfname, "none") == 0 && strcmp(ciphername, "none") != 0) {
                r = SSH_ERR_INVALID_FORMAT;
                goto out;
        }
+       if ((passphrase == NULL || strlen(passphrase) == 0) &&
+           strcmp(kdfname, "none") != 0) {
+               /* passphrase required */
+               r = SSH_ERR_KEY_WRONG_PASSPHRASE;
+               goto out;
+       }
        if (nkeys != 1) {
                /* XXX only one key supported */
                r = SSH_ERR_INVALID_FORMAT;