|
23 | 23 | uses: wolfSSL/actions-build-autotools-project@v1 |
24 | 24 | with: |
25 | 25 | path: wolfssl |
26 | | - configure: --enable-ech CFLAGS='-DUSE_FLAT_TEST_H' |
| 26 | + configure: >- |
| 27 | + --enable-ech --enable-sha512 --enable-aes CFLAGS='-DUSE_FLAT_TEST_H' |
27 | 28 | install: true |
28 | 29 |
|
29 | 30 | - name: tar build-dir |
|
38 | 39 | cp -r "$GITHUB_WORKSPACE/wolfssl/certs" build-dir/certs |
39 | 40 | tar -zcf build-dir.tgz build-dir |
40 | 41 |
|
| 42 | + # need the ech script to run tests |
| 43 | + cp "$GITHUB_WORKSPACE/wolfssl/.github/scripts/openssl-ech.sh" \ |
| 44 | + build-dir/openssl-ech.sh |
| 45 | +
|
41 | 46 | - name: Upload built wolfSSL |
42 | 47 | uses: actions/upload-artifact@v4 |
43 | 48 | with: |
@@ -117,76 +122,23 @@ jobs: |
117 | 122 |
|
118 | 123 | export LD_LIBRARY_PATH="$GITHUB_WORKSPACE/openssl-install/lib64:$GITHUB_WORKSPACE/openssl-install/lib:$GITHUB_WORKSPACE/build-dir/lib:$LD_LIBRARY_PATH" |
119 | 124 |
|
120 | | - OPENSSL=$GITHUB_WORKSPACE/openssl-install/bin/openssl |
121 | | - WOLFSSL_SERVER=$GITHUB_WORKSPACE/build-dir/bin/server |
122 | | -
|
| 125 | + OPENSSL="$GITHUB_WORKSPACE/openssl-install/bin/openssl" |
| 126 | + WOLFSSL_SERVER="$GITHUB_WORKSPACE/build-dir/bin/server" |
123 | 127 | CERT_DIR="$GITHUB_WORKSPACE/build-dir/certs" |
124 | | - READY_FILE="$GITHUB_WORKSPACE/wolfssl_tls13_ready$$" |
125 | 128 | LOG_FILE="$GITHUB_WORKSPACE/log_file.log" |
126 | | - PRIV_NAME="ech-private-name.com" |
127 | | - PUB_NAME="ech-public-name.com" |
128 | | - ECH_CONFIG="" |
129 | | - PORT=0 |
130 | | -
|
131 | | - rm -f "$READY_FILE" |
132 | 129 |
|
133 | 130 | # need to cd into build-dir so the certs/ dir is available for server |
134 | 131 | cd build-dir |
135 | 132 |
|
136 | 133 | $OPENSSL version | tee "$LOG_FILE" |
137 | 134 |
|
138 | | - # start server with ephemeral port + ready file |
139 | | - # also set server to be line buffered so the log can be grepped |
140 | | - stdbuf -oL $WOLFSSL_SERVER \ |
141 | | - -v 4 \ |
142 | | - -R "$READY_FILE" \ |
143 | | - -p "$PORT" \ |
144 | | - -S "$PRIV_NAME" \ |
145 | | - --ech "$PUB_NAME" \ |
146 | | - &>> "$LOG_FILE" & |
147 | | -
|
148 | | - # wait for server to be ready, then get port |
149 | | - counter=0 |
150 | | - while [ ! -s "$READY_FILE" ]; do |
151 | | - sleep 0.1 |
152 | | - counter=$((counter + 1)) |
153 | | - if [ "$counter" -gt 50 ]; then |
154 | | - echo "ERROR: no ready file" &>> "$LOG_FILE" |
155 | | - exit 1 |
156 | | - fi |
157 | | - done |
158 | | - PORT="$(cat "$READY_FILE")" |
159 | | - echo "parsed port: $PORT" &>> "$LOG_FILE" |
160 | | -
|
161 | | - # get ECH config from server |
162 | | - counter=0 |
163 | | - while [ -z "$ECH_CONFIG" ]; do |
164 | | - ECH_CONFIG=$(grep -m1 "ECH config (base64): " "$LOG_FILE" \ |
165 | | - 2>/dev/null | sed 's/ECH config (base64): //g') |
166 | | - sleep 0.1 |
167 | | - counter=$((counter + 1)) |
168 | | - if [ "$counter" -gt 50 ]; then |
169 | | - echo "ERROR: no ECH configs" &>> "$LOG_FILE" |
170 | | - exit 1 |
171 | | - fi |
172 | | - done |
173 | | - echo "parsed ech config: $ECH_CONFIG" &>> "$LOG_FILE" |
174 | | -
|
175 | | - # Test with OpenSSL s_client using ECH |
176 | | - echo "wolfssl" | $OPENSSL s_client \ |
177 | | - -tls1_3 \ |
178 | | - -connect "localhost:$PORT" \ |
179 | | - -cert "$CERT_DIR/client-cert.pem" \ |
180 | | - -key "$CERT_DIR/client-key.pem" \ |
181 | | - -CAfile "$CERT_DIR/ca-cert.pem" \ |
182 | | - -servername "$PRIV_NAME" \ |
183 | | - -ech_config_list "$ECH_CONFIG" \ |
184 | | - &>> "$LOG_FILE" |
185 | | -
|
186 | | - grep "ECH: success: 1" "$LOG_FILE" |
| 135 | + # default suite (DHKEM_X25519_HKDF_SHA256, HKDF_SHA256, HPKE_AES_128_GCM) |
| 136 | + bash ./openssl-ech.sh client &>> "$LOG_FILE" |
| 137 | +
|
| 138 | + # weird suite (DHKEM_P521_HKDF_SHA512, HKDF_SHA256, HPKE_AES_256_GCM) |
| 139 | + bash ./openssl-ech.sh client --suite "18,3,2" &>> "$LOG_FILE" |
187 | 140 |
|
188 | 141 | # cleanup |
189 | | - rm -f "$READY_FILE" |
190 | 142 | rm -f "$LOG_FILE" |
191 | 143 |
|
192 | 144 | - name: Print debug info on failure |
@@ -238,69 +190,24 @@ jobs: |
238 | 190 |
|
239 | 191 | export LD_LIBRARY_PATH="$GITHUB_WORKSPACE/openssl-install/lib64:$GITHUB_WORKSPACE/openssl-install/lib:$GITHUB_WORKSPACE/build-dir/lib:$LD_LIBRARY_PATH" |
240 | 192 |
|
241 | | - OPENSSL=$GITHUB_WORKSPACE/openssl-install/bin/openssl |
242 | | - WOLFSSL_CLIENT=$GITHUB_WORKSPACE/build-dir/bin/client |
243 | | -
|
| 193 | + OPENSSL="$GITHUB_WORKSPACE/openssl-install/bin/openssl" |
| 194 | + WOLFSSL_CLIENT="$GITHUB_WORKSPACE/build-dir/bin/client" |
244 | 195 | CERT_DIR="$GITHUB_WORKSPACE/build-dir/certs" |
245 | 196 | LOG_FILE="$GITHUB_WORKSPACE/log_file.log" |
246 | | - ECH_FILE="$GITHUB_WORKSPACE/ech_config.pem" |
247 | | - PRIV_NAME="ech-private-name.com" |
248 | | - PUB_NAME="ech-public-name.com" |
249 | | - PORT="" |
250 | | - ECH_CONFIG="" |
251 | | -
|
252 | | - rm -f "$ECH_FILE" |
253 | 197 |
|
254 | 198 | # need to cd into build-dir so the certs/ dir is available for client |
255 | 199 | cd build-dir |
256 | 200 |
|
257 | 201 | $OPENSSL version | tee "$LOG_FILE" |
258 | 202 |
|
259 | | - $OPENSSL ech -public_name "$PUB_NAME" -out "$ECH_FILE" &>> "$LOG_FILE" |
260 | | -
|
261 | | - # parse ECH config from file |
262 | | - ECH_CONFIG=$(sed -n '/BEGIN ECHCONFIG/,/END ECHCONFIG/{/BEGIN ECHCONFIG\|END ECHCONFIG/d;p}' "$ECH_FILE" | tr -d '\n') |
263 | | - echo "parsed ech config: $ECH_CONFIG" &>> "$LOG_FILE" |
264 | | -
|
265 | | - # start OpenSSL ECH server with ephemeral port and make sure it is |
266 | | - # line-buffered |
267 | | - stdbuf -oL $OPENSSL s_server \ |
268 | | - -tls1_3 \ |
269 | | - -cert "$CERT_DIR/server-cert.pem" \ |
270 | | - -key "$CERT_DIR/server-key.pem" \ |
271 | | - -cert2 "$CERT_DIR/server-cert.pem" \ |
272 | | - -key2 "$CERT_DIR/server-key.pem" \ |
273 | | - -ech_key "$ECH_FILE" \ |
274 | | - -servername "$PRIV_NAME" \ |
275 | | - -accept 0 \ |
276 | | - -naccept 1 \ |
277 | | - &>> "$LOG_FILE" <<< "wolfssl!" & |
278 | | -
|
279 | | - # wait for server port to be ready and capture it |
280 | | - counter=0 |
281 | | - while [ -z "$PORT" ]; do |
282 | | - PORT=$(grep -m1 "ACCEPT" "$LOG_FILE" | sed 's/.*:\([0-9]*\)$/\1/') |
283 | | - sleep 0.1 |
284 | | - counter=$((counter + 1)) |
285 | | - if [ "$counter" -gt 50 ]; then |
286 | | - echo "ERROR: server port not found" &>> "$LOG_FILE" |
287 | | - exit 1 |
288 | | - fi |
289 | | - done |
290 | | - echo "parsed port: $PORT" &>> "$LOG_FILE" |
291 | | -
|
292 | | - # test with wolfssl client |
293 | | - $WOLFSSL_CLIENT -v 4 \ |
294 | | - -p "$PORT" \ |
295 | | - -S "$PRIV_NAME" \ |
296 | | - --ech "$ECH_CONFIG" \ |
297 | | - &>> "$LOG_FILE" |
298 | | -
|
299 | | - grep "ech_success=1" "$LOG_FILE" |
| 203 | + # default suite (DHKEM_X25519_HKDF_SHA256, HKDF_SHA256, HPKE_AES_128_GCM) |
| 204 | + bash ./openssl-ech.sh server &>> "$LOG_FILE" |
| 205 | +
|
| 206 | + # weird suite (DHKEM_P521_HKDF_SHA512, HKDF_SHA256, HPKE_AES_256_GCM) |
| 207 | + bash ./openssl-ech.sh server --suite "18,3,2" &>> "$LOG_FILE" |
300 | 208 |
|
301 | 209 | # cleanup |
302 | 210 | rm -f "$LOG_FILE" |
303 | | - rm -f "$ECH_FILE" |
304 | 211 |
|
305 | 212 | - name: Print debug info on failure |
306 | 213 | if: ${{ failure() }} |
|
0 commit comments