Skip to content

Commit 0909d68

Browse files
aidangarskedanielinux
authored andcommitted
Add HTTPS web server and SSH shell support for
STM32H563 - Add HTTPS server serving status page on port 443 (ENABLE_HTTPS=1) - Add SSH server with interactive shell on port 22 (ENABLE_SSH=1) - Add wolfssh_io.c for wolfSSH-wolfIP integration - Increase MAX_TCPSOCKETS from 4 to 8 to support multiple servers - Fix IP address byte order display in HTTPS status page - Update Makefile with ENABLE_HTTPS and ENABLE_SSH build flags - Update README with build and testing documentation
1 parent 342dcb3 commit 0909d68

11 files changed

Lines changed: 1594 additions & 25 deletions

File tree

src/port/stm32h563/Makefile

Lines changed: 77 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,15 @@ TZEN ?= 0
1111
# Requires wolfSSL cloned alongside wolfip (or set WOLFSSL_ROOT)
1212
ENABLE_TLS ?= 0
1313

14+
# HTTPS web server: set ENABLE_HTTPS=1 to include HTTPS web server (requires TLS)
15+
ENABLE_HTTPS ?= 0
16+
17+
# SSH support: set ENABLE_SSH=1 to include wolfSSH server (requires TLS)
18+
ENABLE_SSH ?= 0
19+
1420
# Library paths - default to sibling directories (clone alongside pattern)
1521
WOLFSSL_ROOT ?= $(ROOT)/../wolfssl
22+
WOLFSSH_ROOT ?= $(ROOT)/../wolfssh
1623

1724
# Base compiler flags
1825
CFLAGS := -mcpu=cortex-m33 -mthumb -mcmse -Os -ffreestanding -fdata-sections -ffunction-sections
@@ -53,11 +60,17 @@ CFLAGS += -DWOLFSSL_USER_SETTINGS
5360
CFLAGS += -DWOLFSSL_WOLFIP
5461
CFLAGS += -I$(WOLFSSL_ROOT)
5562

56-
# TLS server, client, and wolfIP-wolfSSL glue
63+
# TLS server, client and wolfIP-wolfSSL glue
5764
SRCS += tls_server.c
5865
SRCS += tls_client.c
5966
SRCS += $(ROOT)/src/port/wolfssl_io.c
6067

68+
# HTTPS web server (requires TLS)
69+
ifeq ($(ENABLE_HTTPS),1)
70+
CFLAGS += -DENABLE_HTTPS
71+
SRCS += https_server.c
72+
endif
73+
6174
# wolfSSL source files (minimal set for TLS 1.3 server with ECC)
6275
WOLFSSL_SRCS := \
6376
$(WOLFSSL_ROOT)/wolfcrypt/src/aes.c \
@@ -96,16 +109,59 @@ SRCS += $(WOLFSSL_SRCS)
96109

97110
endif # ENABLE_TLS
98111

112+
# -----------------------------------------------------------------------------
113+
# SSH Support (wolfSSH) - requires TLS
114+
# -----------------------------------------------------------------------------
115+
ifeq ($(ENABLE_SSH),1)
116+
117+
# SSH requires TLS
118+
ifeq ($(ENABLE_TLS),0)
119+
$(error ENABLE_SSH=1 requires ENABLE_TLS=1)
120+
endif
121+
122+
# Validate wolfSSH exists
123+
ifeq ($(wildcard $(WOLFSSH_ROOT)/wolfssh/ssh.h),)
124+
$(error wolfSSH not found at $(WOLFSSH_ROOT). Clone it: git clone https://github.com/wolfSSL/wolfssh.git)
125+
endif
126+
127+
CFLAGS += -DENABLE_SSH
128+
CFLAGS += -DWOLFSSH_USER_SETTINGS
129+
CFLAGS += -I$(WOLFSSH_ROOT)
130+
131+
# SSH server and wolfSSH-wolfIP glue
132+
SRCS += ssh_server.c
133+
SRCS += $(ROOT)/src/port/wolfssh_io.c
134+
135+
# wolfSSH source files (minimal set for SSH server)
136+
WOLFSSH_SRCS := \
137+
$(WOLFSSH_ROOT)/src/ssh.c \
138+
$(WOLFSSH_ROOT)/src/internal.c \
139+
$(WOLFSSH_ROOT)/src/io.c \
140+
$(WOLFSSH_ROOT)/src/keygen.c \
141+
$(WOLFSSH_ROOT)/src/log.c \
142+
$(WOLFSSH_ROOT)/src/port.c
143+
144+
SRCS += $(WOLFSSH_SRCS)
145+
146+
# wolfSSH objects use relaxed warnings
147+
$(WOLFSSH_ROOT)/%.o: $(WOLFSSH_ROOT)/%.c
148+
$(CC) $(CFLAGS_WOLFSSL) -c $< -o $@
149+
150+
endif # ENABLE_SSH
151+
99152
# -----------------------------------------------------------------------------
100153
# Build rules
101154
# -----------------------------------------------------------------------------
102155
OBJS := $(patsubst %.c,%.o,$(SRCS))
103156

104157
all: app.bin
105-
@echo "Built with TZEN=$(TZEN) ENABLE_TLS=$(ENABLE_TLS)"
158+
@echo "Built with TZEN=$(TZEN) ENABLE_TLS=$(ENABLE_TLS) ENABLE_HTTPS=$(ENABLE_HTTPS) ENABLE_SSH=$(ENABLE_SSH)"
106159
ifeq ($(ENABLE_TLS),1)
107160
@echo " wolfSSL: $(WOLFSSL_ROOT)"
108161
endif
162+
ifeq ($(ENABLE_SSH),1)
163+
@echo " wolfSSH: $(WOLFSSH_ROOT)"
164+
endif
109165

110166
app.elf: $(OBJS) $(LDSCRIPT)
111167
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -Wl,--start-group -lc -lm -lgcc -lnosys -Wl,--end-group -o $@
@@ -128,6 +184,9 @@ ifeq ($(ENABLE_TLS),1)
128184
rm -f $(WOLFSSL_ROOT)/wolfcrypt/src/*.o
129185
rm -f $(WOLFSSL_ROOT)/src/*.o
130186
endif
187+
ifeq ($(ENABLE_SSH),1)
188+
rm -f $(WOLFSSH_ROOT)/src/*.o
189+
endif
131190

132191
.PHONY: all clean
133192

@@ -145,17 +204,24 @@ help:
145204
@echo " help Show this help"
146205
@echo ""
147206
@echo "Options:"
148-
@echo " TZEN=1 Enable TrustZone support"
149-
@echo " ENABLE_TLS=1 Enable TLS server (requires wolfSSL)"
150-
@echo " WOLFSSL_ROOT= Path to wolfSSL (default: ../wolfssl)"
207+
@echo " TZEN=1 Enable TrustZone support"
208+
@echo " ENABLE_TLS=1 Enable TLS server (requires wolfSSL)"
209+
@echo " ENABLE_HTTPS=1 Enable HTTPS web server (requires TLS)"
210+
@echo " ENABLE_SSH=1 Enable SSH server (requires TLS + wolfSSH)"
211+
@echo " WOLFSSL_ROOT= Path to wolfSSL (default: ../wolfssl)"
212+
@echo " WOLFSSH_ROOT= Path to wolfSSH (default: ../wolfssh)"
151213
@echo ""
152214
@echo "Examples:"
153-
@echo " make # Basic build"
154-
@echo " make TZEN=1 # TrustZone enabled"
155-
@echo " make ENABLE_TLS=1 # With TLS server"
156-
@echo " make TZEN=1 ENABLE_TLS=1 # Both"
215+
@echo " make # Basic TCP echo (port 7)"
216+
@echo " make ENABLE_TLS=1 # TLS echo server (port 8443)"
217+
@echo " make ENABLE_TLS=1 ENABLE_HTTPS=1 # TLS + HTTPS web (port 443)"
218+
@echo " make ENABLE_TLS=1 ENABLE_SSH=1 # TLS + SSH shell (port 22)"
219+
@echo " make ENABLE_TLS=1 ENABLE_HTTPS=1 ENABLE_SSH=1 # Full featured"
157220
@echo ""
158-
@echo "Testing TLS server:"
159-
@echo " echo 'Hello' | openssl s_client -connect <ip>:8443 -quiet"
221+
@echo "Testing:"
222+
@echo " nc <ip> 7 # TCP echo"
223+
@echo " echo 'Hello' | openssl s_client -connect <ip>:8443 -quiet # TLS echo"
224+
@echo " curl -k https://<ip>/ # HTTPS web server"
225+
@echo " ssh admin@<ip> # SSH (password: wolfip)"
160226

161227
.PHONY: help

0 commit comments

Comments
 (0)