Check if encoding works in dsa_init(). This avoids calling fatal()
authortobhe <tobhe@openbsd.org>
Thu, 18 Nov 2021 22:42:02 +0000 (22:42 +0000)
committertobhe <tobhe@openbsd.org>
Thu, 18 Nov 2021 22:42:02 +0000 (22:42 +0000)
in dsa_length() or dsa_prefix() when the selected encoding is invalid.

ok markus@

sbin/iked/crypto.c

index 8e7f90e..9b5f38b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: crypto.c,v 1.34 2021/02/25 20:13:24 tobhe Exp $       */
+/*     $OpenBSD: crypto.c,v 1.35 2021/11/18 22:42:02 tobhe Exp $       */
 
 /*
  * Copyright (c) 2010-2013 Reyk Floeter <reyk@openbsd.org>
@@ -958,6 +958,8 @@ dsa_init(struct iked_dsa *dsa, const void *buf, size_t len)
                    EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1) <= 0)
                        return (-1);
        }
+       if (_dsa_sign_encode(dsa, NULL, 0, NULL) < 0)
+               return (-1);
 
        return (ret == 1 ? 0 : -1);
 }