Don't check curves that haven't been sent
authorMatt Caswell <matt@openssl.org>
Fri, 20 Mar 2015 15:10:16 +0000 (15:10 +0000)
committerMatt Caswell <matt@openssl.org>
Mon, 23 Mar 2015 14:03:39 +0000 (14:03 +0000)
Don't check that the curve appears in the list of acceptable curves for the
peer, if they didn't send us such a list (RFC 4492 does not require that the
extension be sent).

Reviewed-by: Emilia Käsper <emilia@openssl.org>
ssl/t1_lib.c

index 8b75dba6ad71903497a647cd39d1a3c60cb829d9..511223eb94c78acb334a4801304854151b4395f0 100644 (file)
@@ -706,6 +706,16 @@ static int tls1_check_ec_key(SSL *s,
     for (j = 0; j <= 1; j++) {
         if (!tls1_get_curvelist(s, j, &pcurves, &num_curves))
             return 0;
+        if (j == 1 && num_curves == 0) {
+            /*
+             * If we've not received any curves then skip this check.
+             * RFC 4492 does not require the supported elliptic curves extension
+             * so if it is not sent we can just choose any curve.
+             * It is invalid to send an empty list in the elliptic curves
+             * extension, so num_curves == 0 always means no extension.
+             */
+            break;
+        }
         for (i = 0; i < num_curves; i++, pcurves += 2) {
             if (pcurves[0] == curve_id[0] && pcurves[1] == curve_id[1])
                 break;