@@ -11,7 +11,7 @@ cleanup() {
1111trap cleanup EXIT
1212
1313usage () {
14- echo " Usage: $0 <client|server> [--suite <KEM,KDF,AEAD>] [--pqc <group>] [--hrr] [--workspace <path>]"
14+ echo " Usage: $0 <client|server> [--suite <KEM,KDF,AEAD>] [--pqc <group>] [--hrr] [--reject] [-- workspace <path>]"
1515 exit 1
1616}
1717
@@ -22,6 +22,7 @@ MODE=""
2222SUITE=" "
2323PQC=" "
2424FORCE_HRR=0
25+ REJECT=0
2526
2627WORKSPACE=${GITHUB_WORKSPACE:- " ." }
2728
@@ -51,6 +52,10 @@ while [ $# -gt 0 ]; do
5152 FORCE_HRR=1
5253 shift
5354 ;;
55+ --reject)
56+ REJECT=1
57+ shift
58+ ;;
5459 --workspace)
5560 [ -z " $2 " ] && { echo " ERROR: --workspace requires a value" ; exit 1; }
5661 WORKSPACE=" $2 "
@@ -84,9 +89,12 @@ WOLFSSL_CLIENT=${WOLFSSL_CLIENT:-"$WORKSPACE/examples/client/client"}
8489WOLFSSL_SERVER=${WOLFSSL_SERVER:- " $WORKSPACE /examples/server/server" }
8590CERT_DIR=${CERT_DIR:- " $WORKSPACE /certs" }
8691
92+ # correct ECH config, but it's old, ECH will be rejected
93+ REJECT_ECH_CONFIG=" AD7+DQA6rAAgACCATZdDlHed6GlDeiYsu3r7sdWUkLVHZuTa3lbOf+hIbAAEAAEAAQALZXhhbXBsZS5jb20AAA=="
94+
8795TMP_LOG=" $WORKSPACE /tmp_file.log"
8896PRIV_NAME=" ech-private-name.com"
89- PUB_NAME=" ech-public-name .com"
97+ PUB_NAME=" example .com"
9098MAX_WAIT=50
9199
92100# --------------------------------------------------------------------------
@@ -128,6 +136,8 @@ openssl_server(){
128136
129137 # parse ECH config from file
130138 ech_config=$( sed -n ' /BEGIN ECHCONFIG/,/END ECHCONFIG/{/BEGIN ECHCONFIG\|END ECHCONFIG/d;p}' " $ech_file " | tr -d ' \n' )
139+ # reject overrides the config the client connects with
140+ [ " $REJECT " -ne 0 ] && ech_config=" $REJECT_ECH_CONFIG "
131141 echo " parsed ech config: $ech_config " & >> " $TMP_LOG "
132142
133143 # start OpenSSL ECH server with ephemeral port; line-buffer so the
@@ -158,17 +168,29 @@ openssl_server(){
158168 done
159169 echo " parsed port: $port " & >> " $TMP_LOG "
160170
161- # test with wolfssl client
162- $WOLFSSL_CLIENT -v 4 \
163- -p " $port " \
164- -S " $PRIV_NAME " \
165- --ech " $ech_config " \
166- $wolfssl_extra \
167- & >> " $TMP_LOG "
168-
169171 rm -f " $ech_file "
170172
171- grep -q " ech_success=1" " $TMP_LOG "
173+ # test with wolfssl client
174+ if [ " $REJECT " -ne 0 ]; then
175+ $WOLFSSL_CLIENT -v 4 \
176+ -p " $port " \
177+ -S " $PRIV_NAME " \
178+ --ech " $ech_config " \
179+ $wolfssl_extra \
180+ & >> " $TMP_LOG " || true
181+
182+ grep -q " ECH offered but rejected by server" " $TMP_LOG "
183+ grep -q " ech_success=0" " $TMP_LOG "
184+ else
185+ $WOLFSSL_CLIENT -v 4 \
186+ -p " $port " \
187+ -S " $PRIV_NAME " \
188+ --ech " $ech_config " \
189+ $wolfssl_extra \
190+ & >> " $TMP_LOG "
191+
192+ grep -q " ech_success=1" " $TMP_LOG "
193+ fi
172194}
173195
174196# --------------------------------------------------------------------------
@@ -246,21 +268,39 @@ openssl_client(){
246268 exit 1
247269 fi
248270 done
271+ # reject overrides the config the client connects with
272+ [ " $REJECT " -ne 0 ] && ech_config=" $REJECT_ECH_CONFIG "
249273 echo " parsed ech config: $ech_config " & >> " $TMP_LOG "
250274
251- # test with OpenSSL s_client using ECH
252- echo " wolfssl" | $OPENSSL s_client \
253- -tls1_3 \
254- -connect " localhost:$port " \
255- -cert " $CERT_DIR /client-cert.pem" \
256- -key " $CERT_DIR /client-key.pem" \
257- -CAfile " $CERT_DIR /ca-cert.pem" \
258- -servername " $PRIV_NAME " \
259- -ech_config_list " $ech_config " \
260- $openssl_groups \
261- & >> " $TMP_LOG "
262-
263- grep -q " ECH: success: 1" " $TMP_LOG "
275+ if [ " $REJECT " -ne 0 ]; then
276+ # test with OpenSSL s_client using ECH
277+ echo " wolfssl" | $OPENSSL s_client \
278+ -tls1_3 \
279+ -connect " localhost:$port " \
280+ -cert " $CERT_DIR /client-cert.pem" \
281+ -key " $CERT_DIR /client-key.pem" \
282+ -CAfile " $CERT_DIR /ca-cert.pem" \
283+ -servername " $PRIV_NAME " \
284+ -ech_config_list " $ech_config " \
285+ $openssl_groups \
286+ & >> " $TMP_LOG " || true
287+
288+ grep -q " ECH: Got 1 retry-configs" " $TMP_LOG "
289+ else
290+ # test with OpenSSL s_client using ECH
291+ echo " wolfssl" | $OPENSSL s_client \
292+ -tls1_3 \
293+ -connect " localhost:$port " \
294+ -cert " $CERT_DIR /client-cert.pem" \
295+ -key " $CERT_DIR /client-key.pem" \
296+ -CAfile " $CERT_DIR /ca-cert.pem" \
297+ -servername " $PRIV_NAME " \
298+ -ech_config_list " $ech_config " \
299+ $openssl_groups \
300+ & >> " $TMP_LOG "
301+
302+ grep -q " ECH: success: 1" " $TMP_LOG "
303+ fi
264304}
265305
266306rm -f " $TMP_LOG "
0 commit comments