Skip to content

Commit 882fae4

Browse files
committed
Merge branch 'master' into lpc55s69_crypto
2 parents 3878271 + c098e53 commit 882fae4

527 files changed

Lines changed: 72736 additions & 30440 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: 'Install apt dependencies'
2+
description: 'Install apt packages with retry logic and caching'
3+
inputs:
4+
packages:
5+
description: 'Space-separated list of apt packages to install'
6+
required: true
7+
retries:
8+
description: 'Number of retry attempts'
9+
required: false
10+
default: '3'
11+
retry-delay:
12+
description: 'Initial delay between retries (seconds, doubles each attempt)'
13+
required: false
14+
default: '5'
15+
no-install-recommends:
16+
description: 'Pass --no-install-recommends to apt-get install'
17+
required: false
18+
default: 'false'
19+
cache:
20+
description: 'Cache apt archives (disable for dynamic package names)'
21+
required: false
22+
default: 'true'
23+
runs:
24+
using: 'composite'
25+
steps:
26+
- name: Compute cache key
27+
if: inputs.cache == 'true'
28+
id: cache-key
29+
shell: bash
30+
run: |
31+
SORTED_PKGS=$(echo "${{ inputs.packages }}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
32+
PKG_HASH=$(echo "$SORTED_PKGS" | sha256sum | cut -d' ' -f1 | head -c 16)
33+
OS_VERSION=$(lsb_release -rs 2>/dev/null || echo "unknown")
34+
echo "key=apt-deps-${{ runner.os }}-${{ runner.arch }}-${OS_VERSION}-${PKG_HASH}" >> $GITHUB_OUTPUT
35+
echo "restore-key=apt-deps-${{ runner.os }}-${{ runner.arch }}-${OS_VERSION}-" >> $GITHUB_OUTPUT
36+
37+
- name: Restore apt cache
38+
if: inputs.cache == 'true'
39+
id: apt-cache
40+
uses: actions/cache/restore@v4
41+
with:
42+
path: ~/apt-cache
43+
key: ${{ steps.cache-key.outputs.key }}
44+
restore-keys: ${{ steps.cache-key.outputs.restore-key }}
45+
46+
- name: Pre-seed apt archives from cache
47+
if: inputs.cache == 'true' && steps.apt-cache.outputs.cache-hit == 'true'
48+
shell: bash
49+
run: |
50+
if [ -d ~/apt-cache ] && ls ~/apt-cache/*.deb >/dev/null 2>&1; then
51+
sudo cp ~/apt-cache/*.deb /var/cache/apt/archives/
52+
echo "Restored $(ls ~/apt-cache/*.deb | wc -l) cached .deb files"
53+
fi
54+
55+
- name: Install packages
56+
shell: bash
57+
run: |
58+
export DEBIAN_FRONTEND=noninteractive
59+
RETRIES=${{ inputs.retries }}
60+
DELAY=${{ inputs.retry-delay }}
61+
NO_REC=""
62+
if [ "${{ inputs.no-install-recommends }}" = "true" ]; then
63+
NO_REC="--no-install-recommends"
64+
fi
65+
for i in $(seq 1 $RETRIES); do
66+
if sudo apt-get update -q && \
67+
sudo apt-get install -y $NO_REC ${{ inputs.packages }}; then
68+
exit 0
69+
fi
70+
if [ "$i" -eq "$RETRIES" ]; then
71+
echo "::error::apt-get failed after $RETRIES attempts"
72+
exit 1
73+
fi
74+
echo "::warning::apt-get failed (attempt $i/$RETRIES), retrying in ${DELAY}s..."
75+
sleep $DELAY
76+
DELAY=$((DELAY * 2))
77+
done
78+
79+
- name: Collect .deb files for cache
80+
if: inputs.cache == 'true' && steps.apt-cache.outputs.cache-hit != 'true'
81+
shell: bash
82+
run: |
83+
mkdir -p ~/apt-cache
84+
cp /var/cache/apt/archives/*.deb ~/apt-cache/ 2>/dev/null || true
85+
echo "Cached $(ls ~/apt-cache/*.deb 2>/dev/null | wc -l) .deb files"
86+
87+
- name: Save apt cache
88+
if: inputs.cache == 'true' && steps.apt-cache.outputs.cache-hit != 'true'
89+
uses: actions/cache/save@v4
90+
with:
91+
path: ~/apt-cache
92+
key: ${{ steps.cache-key.outputs.key }}

.github/membrowse-targets.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
[
2+
{
3+
"target_name": "gcc-arm-cortex-m4",
4+
"port": "gcc-arm",
5+
"board": "cortex-m4",
6+
"setup_cmd": "sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib",
7+
"build_cmd": "test -f IDE/GCC-ARM/Header/user_settings.h && mkdir -p IDE/GCC-ARM/Header-gen && { cat IDE/GCC-ARM/Header/user_settings.h; printf '#define NO_CRYPT_TEST\\n#define NO_CRYPT_BENCHMARK\\n'; } > IDE/GCC-ARM/Header-gen/user_settings.h && cd IDE/GCC-ARM && make -f Makefile.test TOOLCHAIN=arm-none-eabi- FIPS=0 USER_SETTINGS_DIR=./Header-gen CFLAGS_EXTRA='-Wno-cpp -DWOLFCRYPT_ONLY -DWOLFSSL_NO_SOCK' LDFLAGS='-mcpu=cortex-m4 -mthumb -mabi=aapcs --specs=nosys.specs --specs=nano.specs -Wl,-Map=./Build/WolfCryptTest.map -Wl,-ereset_handler -flto -Wl,--defsym=__stack_process_end__=0x20010000'",
8+
"elf": "IDE/GCC-ARM/Build/WolfCryptTest.elf",
9+
"ld": "IDE/GCC-ARM/linker.ld",
10+
"linker_vars": ""
11+
},
12+
{
13+
"target_name": "gcc-arm-cortex-m4-min-ecc",
14+
"port": "gcc-arm",
15+
"board": "cortex-m4-min-ecc",
16+
"setup_cmd": "sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib",
17+
"build_cmd": "test -f examples/configs/user_settings_min_ecc.h && mkdir -p IDE/GCC-ARM/Header-gen && { cat examples/configs/user_settings_min_ecc.h; printf '#define WOLFSSL_GENERAL_ALIGNMENT 4\\n#define SINGLE_THREADED\\n#define WOLFSSL_SMALL_STACK\\n#define NO_FILESYSTEM\\n#define NO_WRITEV\\n#define NO_MAIN_DRIVER\\n#define NO_DEV_RANDOM\\n#define BENCH_EMBEDDED\\n#define USE_CERT_BUFFERS_256\\n#define WOLFSSL_IGNORE_FILE_WARN\\n#define USE_WOLF_ARM_STARTUP\\n#define WOLFSSL_USER_CURRTIME\\n#define WOLFSSL_GMTIME\\n#define USER_TICKS\\nextern unsigned long my_time(unsigned long* timer);\\n#define XTIME my_time\\n#define CUSTOM_RAND_TYPE unsigned int\\nextern unsigned int my_rng_seed_gen(void);\\n#undef CUSTOM_RAND_GENERATE\\n#define CUSTOM_RAND_GENERATE my_rng_seed_gen\\n#define HAVE_HASHDRBG\\n#define NO_CRYPT_TEST\\n#define NO_CRYPT_BENCHMARK\\n'; } > IDE/GCC-ARM/Header-gen/user_settings.h && cd IDE/GCC-ARM && make -f Makefile.test TOOLCHAIN=arm-none-eabi- FIPS=0 USER_SETTINGS_DIR=./Header-gen CFLAGS_EXTRA='-Wno-cpp -DWOLFSSL_NO_SOCK -DWOLFCRYPT_ONLY' LDFLAGS='-mcpu=cortex-m4 -mthumb -mabi=aapcs --specs=nosys.specs --specs=nano.specs -Wl,-Map=./Build/WolfCryptTest.map -Wl,-ereset_handler -flto -Wl,--defsym=__stack_process_end__=0x20010000'",
18+
"elf": "IDE/GCC-ARM/Build/WolfCryptTest.elf",
19+
"ld": "IDE/GCC-ARM/linker.ld",
20+
"linker_vars": ""
21+
},
22+
{
23+
"target_name": "gcc-arm-cortex-m4-tls12",
24+
"port": "gcc-arm",
25+
"board": "cortex-m4-tls12",
26+
"setup_cmd": "sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib",
27+
"build_cmd": "test -f examples/configs/user_settings_tls12.h && mkdir -p IDE/GCC-ARM/Header-gen && { cat examples/configs/user_settings_tls12.h; printf '#define WOLFSSL_GENERAL_ALIGNMENT 4\\n#define SINGLE_THREADED\\n#define WOLFSSL_SMALL_STACK\\n#define NO_FILESYSTEM\\n#define NO_WRITEV\\n#define NO_MAIN_DRIVER\\n#define NO_DEV_RANDOM\\n#define BENCH_EMBEDDED\\n#define USE_CERT_BUFFERS_256\\n#define USE_CERT_BUFFERS_2048\\n#define WOLFSSL_IGNORE_FILE_WARN\\n#define USE_WOLF_ARM_STARTUP\\n#define WOLFSSL_USER_CURRTIME\\n#define WOLFSSL_GMTIME\\n#define USER_TICKS\\nextern unsigned long my_time(unsigned long* timer);\\n#define XTIME my_time\\n#define CUSTOM_RAND_TYPE unsigned int\\nextern unsigned int my_rng_seed_gen(void);\\n#undef CUSTOM_RAND_GENERATE\\n#define CUSTOM_RAND_GENERATE my_rng_seed_gen\\n#define HAVE_HASHDRBG\\n#define NO_CRYPT_TEST\\n#define NO_CRYPT_BENCHMARK\\n'; } > IDE/GCC-ARM/Header-gen/user_settings.h && cd IDE/GCC-ARM && make -f Makefile.test TOOLCHAIN=arm-none-eabi- FIPS=0 USER_SETTINGS_DIR=./Header-gen CFLAGS_EXTRA='-Wno-cpp -DWOLFSSL_NO_SOCK' LDFLAGS='-mcpu=cortex-m4 -mthumb -mabi=aapcs --specs=nosys.specs --specs=nano.specs -Wl,-Map=./Build/WolfCryptTest.map -Wl,-ereset_handler -flto -Wl,--defsym=__stack_process_end__=0x20010000'",
28+
"elf": "IDE/GCC-ARM/Build/WolfCryptTest.elf",
29+
"ld": "IDE/GCC-ARM/linker.ld",
30+
"linker_vars": ""
31+
},
32+
{
33+
"target_name": "gcc-arm-cortex-m4-baremetal",
34+
"port": "gcc-arm",
35+
"board": "cortex-m4-baremetal",
36+
"setup_cmd": "sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib",
37+
"build_cmd": "test -f examples/configs/user_settings_baremetal.h && mkdir -p IDE/GCC-ARM/Header-gen && { cat examples/configs/user_settings_baremetal.h; printf '#define WOLFSSL_GENERAL_ALIGNMENT 4\\n#define SINGLE_THREADED\\n#define WOLFSSL_SMALL_STACK\\n#define NO_FILESYSTEM\\n#define NO_WRITEV\\n#define NO_MAIN_DRIVER\\n#define NO_DEV_RANDOM\\n#define BENCH_EMBEDDED\\n#define USE_CERT_BUFFERS_256\\n#define USE_CERT_BUFFERS_2048\\n#define WOLFSSL_IGNORE_FILE_WARN\\n#define USE_WOLF_ARM_STARTUP\\n#define WOLFSSL_USER_CURRTIME\\n#define WOLFSSL_GMTIME\\n#define USER_TICKS\\nextern unsigned long my_time(unsigned long* timer);\\n#define XTIME my_time\\n#define CUSTOM_RAND_TYPE unsigned int\\nextern unsigned int my_rng_seed_gen(void);\\n#undef CUSTOM_RAND_GENERATE\\n#define CUSTOM_RAND_GENERATE my_rng_seed_gen\\n#define HAVE_HASHDRBG\\n#define NO_CRYPT_TEST\\n#define NO_CRYPT_BENCHMARK\\n'; } > IDE/GCC-ARM/Header-gen/user_settings.h && cd IDE/GCC-ARM && make -f Makefile.test TOOLCHAIN=arm-none-eabi- FIPS=0 USER_SETTINGS_DIR=./Header-gen CFLAGS_EXTRA='-Wno-cpp -DWOLFSSL_NO_SOCK -DWOLFCRYPT_ONLY' LDFLAGS='-mcpu=cortex-m4 -mthumb -mabi=aapcs --specs=nosys.specs --specs=nano.specs -Wl,-Map=./Build/WolfCryptTest.map -Wl,-ereset_handler -flto -Wl,--defsym=__stack_process_end__=0x20010000'",
38+
"elf": "IDE/GCC-ARM/Build/WolfCryptTest.elf",
39+
"ld": "IDE/GCC-ARM/linker.ld",
40+
"linker_vars": ""
41+
}
42+
]

.github/scripts/openssl-ech.sh

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
cleanup() {
6+
if [ -f "$TMP_LOG" ]; then
7+
cat "$TMP_LOG"
8+
rm -f "$TMP_LOG"
9+
fi
10+
}
11+
trap cleanup EXIT
12+
13+
usage() {
14+
echo "Usage: $0 <client|server> [--suite <KEM,KDF,AEAD>] [--workspace <path>]"
15+
exit 1
16+
}
17+
18+
MODE=""
19+
SUITE=""
20+
21+
WORKSPACE=${GITHUB_WORKSPACE:-"."}
22+
23+
if [ $# -lt 1 ]; then
24+
usage
25+
fi
26+
27+
case "$1" in
28+
client|server) MODE="$1" ;;
29+
*) usage ;;
30+
esac
31+
shift
32+
33+
while [ $# -gt 0 ]; do
34+
case "$1" in
35+
--suite)
36+
[ -z "$2" ] && { echo "ERROR: --suite requires a value"; exit 1; }
37+
SUITE="$2"
38+
shift 2
39+
echo ""
40+
echo "Using suite: $SUITE"
41+
echo ""
42+
;;
43+
--workspace)
44+
[ -z "$2" ] && { echo "ERROR: --workspace requires a value"; exit 1; }
45+
WORKSPACE="$2"
46+
shift 2
47+
;;
48+
*) echo "Unknown argument: $1"; usage ;;
49+
esac
50+
done
51+
52+
OPENSSL=${OPENSSL:-"openssl"}
53+
WOLFSSL_CLIENT=${WOLFSSL_CLIENT:-"$WORKSPACE/examples/client/client"}
54+
WOLFSSL_SERVER=${WOLFSSL_SERVER:-"$WORKSPACE/examples/server/server"}
55+
CERT_DIR=${CERT_DIR:-"$WORKSPACE/certs"}
56+
57+
TMP_LOG="$WORKSPACE/tmp_file.log"
58+
PRIV_NAME="ech-private-name.com"
59+
PUB_NAME="ech-public-name.com"
60+
MAX_WAIT=50
61+
62+
openssl_server(){
63+
local ech_file="$WORKSPACE/ech_config.pem"
64+
local ech_config=""
65+
local port=""
66+
67+
rm -f "$ech_file"
68+
69+
$OPENSSL ech -public_name "$PUB_NAME" -out "$ech_file" $SUITE &>> "$TMP_LOG"
70+
71+
# parse ECH config from file
72+
ech_config=$(sed -n '/BEGIN ECHCONFIG/,/END ECHCONFIG/{/BEGIN ECHCONFIG\|END ECHCONFIG/d;p}' "$ech_file" | tr -d '\n')
73+
echo "parsed ech config: $ech_config" &>> "$TMP_LOG"
74+
75+
# start OpenSSL ECH server with ephemeral port and make sure it is
76+
# line-buffered
77+
stdbuf -oL $OPENSSL s_server \
78+
-tls1_3 \
79+
-cert "$CERT_DIR/server-cert.pem" \
80+
-key "$CERT_DIR/server-key.pem" \
81+
-cert2 "$CERT_DIR/server-cert.pem" \
82+
-key2 "$CERT_DIR/server-key.pem" \
83+
-ech_key "$ech_file" \
84+
-servername "$PRIV_NAME" \
85+
-accept 0 \
86+
-naccept 1 \
87+
&>> "$TMP_LOG" <<< "wolfssl!" &
88+
89+
# wait for server port to be ready and capture it
90+
counter=0
91+
while [ -z "$port" ]; do
92+
port=$(grep -m1 "ACCEPT" "$TMP_LOG" | sed 's/.*:\([0-9]*\)$/\1/')
93+
sleep 0.1
94+
counter=$((counter + 1))
95+
if [ "$counter" -gt "$MAX_WAIT" ]; then
96+
echo "ERROR: server port not found" &>> "$TMP_LOG"
97+
exit 1
98+
fi
99+
done
100+
echo "parsed port: $port" &>> "$TMP_LOG"
101+
102+
# test with wolfssl client
103+
$WOLFSSL_CLIENT -v 4 \
104+
-p "$port" \
105+
-S "$PRIV_NAME" \
106+
--ech "$ech_config" \
107+
&>> "$TMP_LOG"
108+
109+
rm -f "$ech_file"
110+
111+
grep -q "ech_success=1" "$TMP_LOG"
112+
}
113+
114+
openssl_client(){
115+
local ready_file="$WORKSPACE/wolfssl_tls13_ready$$"
116+
local ech_config=""
117+
local port=0
118+
119+
rm -f "$ready_file"
120+
121+
# start server with ephemeral port + ready file
122+
# also set server to be line buffered so the log can be grepped
123+
stdbuf -oL $WOLFSSL_SERVER \
124+
-v 4 \
125+
-R "$ready_file" \
126+
-p "$port" \
127+
-S "$PRIV_NAME" \
128+
--ech "$PUB_NAME" \
129+
$SUITE \
130+
&>> "$TMP_LOG" &
131+
132+
# wait for server to be ready, then get port
133+
counter=0
134+
while [ ! -s "$ready_file" ]; do
135+
sleep 0.1
136+
counter=$((counter + 1))
137+
if [ "$counter" -gt "$MAX_WAIT" ]; then
138+
echo "ERROR: no ready file" &>> "$TMP_LOG"
139+
exit 1
140+
fi
141+
done
142+
port="$(cat "$ready_file")"
143+
rm -f "$ready_file"
144+
echo "parsed port: $port" &>> "$TMP_LOG"
145+
146+
# get ECH config from server
147+
counter=0
148+
while [ -z "$ech_config" ]; do
149+
ech_config=$(grep -m1 "ECH config (base64): " "$TMP_LOG" \
150+
2>/dev/null | sed 's/ECH config (base64): //g')
151+
sleep 0.1
152+
counter=$((counter + 1))
153+
if [ "$counter" -gt "$MAX_WAIT" ]; then
154+
echo "ERROR: no ECH configs" &>> "$TMP_LOG"
155+
exit 1
156+
fi
157+
done
158+
echo "parsed ech config: $ech_config" &>> "$TMP_LOG"
159+
160+
# Test with OpenSSL s_client using ECH
161+
echo "wolfssl" | $OPENSSL s_client \
162+
-tls1_3 \
163+
-connect "localhost:$port" \
164+
-cert "$CERT_DIR/client-cert.pem" \
165+
-key "$CERT_DIR/client-key.pem" \
166+
-CAfile "$CERT_DIR/ca-cert.pem" \
167+
-servername "$PRIV_NAME" \
168+
-ech_config_list "$ech_config" \
169+
&>> "$TMP_LOG"
170+
171+
grep -q "ECH: success: 1" "$TMP_LOG"
172+
}
173+
174+
rm -f "$TMP_LOG"
175+
176+
case "$MODE" in
177+
server)
178+
if [ -n "$SUITE" ]; then
179+
SUITE="-suite $SUITE"
180+
fi
181+
openssl_server
182+
;;
183+
client)
184+
if [ -n "$SUITE" ]; then
185+
SUITE="--ech-suite $SUITE"
186+
fi
187+
openssl_client
188+
;;
189+
*)
190+
exit 1
191+
;;
192+
esac

.github/workflows/ada.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
build:
1111

1212
if: github.repository_owner == 'wolfssl'
13-
runs-on: ubuntu-latest
13+
runs-on: ubuntu-24.04
1414

1515
steps:
1616
- uses: actions/checkout@v4
@@ -56,11 +56,14 @@ jobs:
5656
if: ${{ failure() && steps.examples.outcome == 'failure' }}
5757
run: cat ./wrapper/Ada/examples/server.log
5858

59+
- name: Install valgrind
60+
uses: ./.github/actions/install-apt-deps
61+
with:
62+
packages: valgrind
63+
5964
- name: Run Ada wrapper tests (valgrind)
6065
working-directory: ./wrapper/Ada/tests
6166
run: |
62-
sudo apt-get update
63-
sudo apt-get install -y valgrind
6467
valgrind --leak-check=full --error-exitcode=1 \
6568
--suppressions=valgrind.supp ./bin/tests
6669

.github/workflows/arduino.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ concurrency:
7777
jobs:
7878
build:
7979
if: github.repository_owner == 'wolfssl'
80-
runs-on: ubuntu-latest
80+
runs-on: ubuntu-24.04
8181

8282
strategy:
8383
fail-fast: false

.github/workflows/async-examples.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
- name: Build async examples (no configure)
3232
run: |
3333
make -C examples/async clean
34-
make -C examples/async ASYNC_MODE=${{ matrix.async_mode }} EXTRA_CFLAGS="${{ matrix.extra_cflags }}"
34+
make -j -C examples/async ASYNC_MODE=${{ matrix.async_mode }} EXTRA_CFLAGS="${{ matrix.extra_cflags }}"
3535
3636
- name: Run async examples
3737
run: |

.github/workflows/async.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ jobs:
1818
matrix:
1919
config: [
2020
# Add new configs here
21+
'--enable-asynccrypt --enable-all --enable-dtls13 --disable-mlkem CFLAGS="-pedantic -Wdeclaration-after-statement -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFCRYPT_TEST_LINT"',
22+
'--enable-asynccrypt-sw --enable-ocspstapling --enable-ocspstapling2 --disable-mlkem CFLAGS="-pedantic -Wdeclaration-after-statement -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
2123
'--enable-asynccrypt --enable-all --enable-dtls13 CFLAGS="-pedantic -Wdeclaration-after-statement -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFCRYPT_TEST_LINT"',
2224
'--enable-asynccrypt-sw --enable-ocspstapling --enable-ocspstapling2 CFLAGS="-pedantic -Wdeclaration-after-statement -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
2325
'--enable-ocsp CFLAGS="-DTEST_NONBLOCK_CERTS -pedantic -Wdeclaration-after-statement -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',

0 commit comments

Comments
 (0)