if (serv_hybrid_idx != -1) {
if (session->internals.cand_group == NULL ||
(session->internals.priorities->server_precedence &&
- serv_hybrid_idx < MIN(serv_ec_idx, serv_dh_idx)) ||
+ (serv_dh_idx == -1 ||
+ serv_hybrid_idx < serv_dh_idx) &&
+ (serv_ec_idx == -1 ||
+ serv_hybrid_idx < serv_ec_idx)) ||
(!session->internals.priorities->server_precedence &&
- cli_hybrid_pos < MIN(cli_ec_pos, cli_dh_pos))) {
+ (cli_dh_pos == -1 ||
+ cli_hybrid_pos < cli_dh_pos) &&
+ (cli_ec_pos == -1 ||
+ cli_hybrid_pos < cli_ec_pos))) {
session->internals.cand_group =
session->internals.priorities->groups
.entry[serv_hybrid_idx];
esac
fi
- eval "${GETPORT}"
- launch_server --echo --priority "NORMAL:-GROUP-ALL:+GROUP-$group" --x509keyfile="$KEY" --x509certfile="$CERT"
- PID=$!
- wait_server ${PID}
-
- ${VALGRIND} "${CLI}" --attime "${ATTIME_VALID}" -p "${PORT}" localhost --priority "NORMAL:-GROUP-ALL:+GROUP-$group" --x509cafile="$CACERT" --logfile="$testdir/cli.log" </dev/null
- kill ${PID}
- wait
-
- grep -- "- Description: (TLS1.3-X.509)-(HYBRID-$group)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)" "$testdir/cli.log" || { echo "unexpected handshake description"; cat "$testdir/cli.log"; exit 1; }
+ # Test hybrid alone, hybrid+EC, hybrid+FFDH, and hybrid+EC+FFDH:
+ # https://gitlab.com/gnutls/gnutls/-/work_items/1828
+ for prio in "NORMAL:-GROUP-ALL:+GROUP-$group" \
+ "NORMAL:-GROUP-ALL:+GROUP-$group:+GROUP-X25519" \
+ "NORMAL:-GROUP-ALL:+GROUP-$group:+GROUP-FFDHE2048" \
+ "NORMAL:-GROUP-ALL:+GROUP-$group:+GROUP-X25519:+GROUP-FFDHE2048"; do
+ eval "${GETPORT}"
+ launch_server --echo --priority "$prio" --x509keyfile="$KEY" --x509certfile="$CERT"
+ PID=$!
+ wait_server ${PID}
+
+ ${VALGRIND} "${CLI}" --attime "${ATTIME_VALID}" -p "${PORT}" localhost --priority "$prio" --x509cafile="$CACERT" --logfile="$testdir/cli.log" </dev/null
+ kill ${PID}
+ wait
+
+ grep -- "- Description: (TLS1.3-X.509)-(HYBRID-$group)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)" "$testdir/cli.log" || { echo "unexpected handshake description"; cat "$testdir/cli.log"; exit 1; }
+ done
done
# KEM based groups cannot be used standalone