############################################################################ # apps/netutils/dropbear/Makefile # # SPDX-License-Identifier: Apache-2.0 # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. The # ASF licenses this file to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance with the # License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. # ############################################################################ include $(APPDIR)/Make.defs ifneq ($(CONFIG_NETUTILS_DROPBEAR),) DROPBEAR_COMMIT = $(patsubst "%",%,$(strip $(CONFIG_NETUTILS_DROPBEAR_COMMIT))) DROPBEAR_ZIP = $(DROPBEAR_COMMIT).zip DROPBEAR_UNPACKNAME = dropbear DROPBEAR_URL = https://github.com/mkj/dropbear/archive UNPACK ?= unzip -q -o ifeq ($(CONFIG_HOST_MACOS),y) PATCH ?= gpatch else PATCH ?= patch endif MODULE = $(CONFIG_NETUTILS_DROPBEAR) PROGNAME = $(CONFIG_NETUTILS_DROPBEAR_PROGNAME) PRIORITY = $(CONFIG_NETUTILS_DROPBEAR_PRIORITY) STACKSIZE = $(CONFIG_NETUTILS_DROPBEAR_STACKSIZE) ifneq ($(CONFIG_NETUTILS_DROPBEAR_SCP),) PROGNAME += scp PRIORITY += $(CONFIG_NETUTILS_DROPBEAR_SCP_PRIORITY) STACKSIZE += $(CONFIG_NETUTILS_DROPBEAR_SCP_STACKSIZE) endif CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)netutils$(DELIM)dropbear" CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)port" CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)dropbear" CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)dropbear$(DELIM)src" CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)dropbear$(DELIM)libtomcrypt$(DELIM)src$(DELIM)headers" CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)dropbear$(DELIM)libtommath" CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)nshlib" ifneq ($(CONFIG_NETUTILS_DROPBEAR_COMPRESSION),) CFLAGS += ${INCDIR_PREFIX}"$(APPDIR)$(DELIM)system$(DELIM)zlib$(DELIM)zlib" endif CFLAGS += ${DEFINE_PREFIX}LOCALOPTIONS_H_EXISTS=1 CFLAGS += ${DEFINE_PREFIX}DROPBEAR_NUTTX=1 CFLAGS += ${DEFINE_PREFIX}DROPBEAR_NUTTX_PASSWD=1 CFLAGS += -Wno-pointer-sign -Wno-format dropbear_nshsession.c_CFLAGS += ${DEFINE_PREFIX}Channel=dropbear_channel dropbear_nshsession.c_CFLAGS += ${DEFINE_PREFIX}ChanType=dropbear_chantype CSRCS = dropbear_nshsession.c CSRCS += port/nuttx_auth.c CSRCS += port/dropbear_utils.c CSRCS += \ dropbear/src/dbutil.c \ dropbear/src/buffer.c \ dropbear/src/dbhelpers.c \ dropbear/src/bignum.c \ dropbear/src/signkey.c \ dropbear/src/dbrandom.c \ dropbear/src/queue.c \ dropbear/src/atomicio.c \ dropbear/src/compat.c \ dropbear/src/fake-rfc2553.c \ dropbear/src/curve25519.c \ dropbear/src/chachapoly.c \ dropbear/src/ltc_prng.c \ dropbear/src/ecc.c \ dropbear/src/ecdsa.c \ dropbear/src/crypto_desc.c \ dropbear/src/dbmalloc.c \ dropbear/src/gensignkey.c \ dropbear/src/common-session.c \ dropbear/src/packet.c \ dropbear/src/common-algo.c \ dropbear/src/common-kex.c \ dropbear/src/common-channel.c \ dropbear/src/common-chansession.c \ dropbear/src/termcodes.c \ dropbear/src/tcp-accept.c \ dropbear/src/listener.c \ dropbear/src/process-packet.c \ dropbear/src/common-runopts.c \ dropbear/src/circbuffer.c \ dropbear/src/list.c \ dropbear/src/netio.c \ dropbear/src/gcm.c \ dropbear/src/kex-x25519.c \ dropbear/src/svr-kex.c \ dropbear/src/svr-auth.c \ dropbear/src/svr-authpasswd.c \ dropbear/src/svr-session.c \ dropbear/src/svr-service.c \ dropbear/src/svr-runopts.c \ dropbear/src/svr-tcpfwd.c \ dropbear/src/svr-forward.c \ dropbear/src/svr-streamfwd.c \ dropbear/src/svr-authpam.c TOMMATH_SRCS = $(shell if [ -d "$(DROPBEAR_UNPACKNAME)/libtommath" ]; then find "$(DROPBEAR_UNPACKNAME)/libtommath" -name "*.c"; fi) TOMCRYPT_SRCS = $(shell if [ -d "$(DROPBEAR_UNPACKNAME)/libtomcrypt/src" ]; then find "$(DROPBEAR_UNPACKNAME)/libtomcrypt/src" -name "*.c" ! -name "sober128tab.c"; fi) # Drop the bundled libtomcrypt HMAC modules replaced by the NuttX adapter. TOMCRYPT_SRCS := $(filter-out \ %/mac/hmac/hmac_init.c \ %/mac/hmac/hmac_process.c \ %/mac/hmac/hmac_done.c, \ $(TOMCRYPT_SRCS)) CSRCS += port/dropbear_ltc_hmac_sha256.c # Replace the bundled chacha20-poly1305 with the /dev/crypto adapter. CSRCS := $(filter-out dropbear/src/chachapoly.c,$(CSRCS)) CSRCS += port/dropbear_chachapoly.c CSRCS += $(TOMMATH_SRCS) CSRCS += $(TOMCRYPT_SRCS) ifneq ($(CONFIG_NETUTILS_DROPBEAR_SCP),) CSRCS += dropbear/src/scpmisc.c CSRCS += port/nuttx_scp.c endif # Match the ESP-IDF port behavior: LTC_SOURCE is only for libtomcrypt sources. $(foreach src,$(TOMCRYPT_SRCS),$(eval $(src)_CFLAGS += ${DEFINE_PREFIX}LTC_SOURCE=1)) # Avoid duplicate symbols when NuttX/apps also provide these APIs. # Apply to all dropbear sources so libtomcrypt definitions and dropbear # callers (e.g. signkey.c) use the same renamed symbols. CFLAGS += ${DEFINE_PREFIX}base64_encode=dropbear_ltc_base64_encode CFLAGS += ${DEFINE_PREFIX}base64_decode=dropbear_ltc_base64_decode CFLAGS += ${DEFINE_PREFIX}ecc_make_key=dropbear_ltc_ecc_make_key MAINSRC = dropbear_main.c ifneq ($(CONFIG_NETUTILS_DROPBEAR_SCP),) MAINSRC += dropbear/src/scp.c dropbear/src/scp.c_CFLAGS += ${DEFINE_PREFIX}xmalloc=dropbear_scp_xmalloc dropbear/src/scp.c_CFLAGS += ${DEFINE_PREFIX}xrealloc=dropbear_scp_xrealloc dropbear/src/scp.c_CFLAGS += ${DEFINE_PREFIX}xfree=dropbear_scp_xfree dropbear/src/scp.c_CFLAGS += ${DEFINE_PREFIX}execvp=dropbear_scp_execvp dropbear/src/scp.c_CFLAGS += -include port/nuttx_scp.h dropbear/src/scp.c_CFLAGS += -Wno-strict-prototypes dropbear/src/scpmisc.c_CFLAGS += ${DEFINE_PREFIX}xmalloc=dropbear_scp_xmalloc dropbear/src/scpmisc.c_CFLAGS += ${DEFINE_PREFIX}xrealloc=dropbear_scp_xrealloc dropbear/src/scpmisc.c_CFLAGS += ${DEFINE_PREFIX}xfree=dropbear_scp_xfree endif $(DROPBEAR_ZIP): @echo "Downloading: $(DROPBEAR_ZIP)" $(Q) curl -L -o $(DROPBEAR_ZIP) $(DROPBEAR_URL)/$(DROPBEAR_ZIP) $(DROPBEAR_UNPACKNAME): $(DROPBEAR_ZIP) @echo "Unpacking: $(DROPBEAR_ZIP) -> $(DROPBEAR_UNPACKNAME)" $(Q) $(UNPACK) $(DROPBEAR_ZIP) $(Q) rm -rf $(DROPBEAR_UNPACKNAME) $(Q) mv dropbear-$(DROPBEAR_COMMIT) $(DROPBEAR_UNPACKNAME) @echo "Patching $(DROPBEAR_UNPACKNAME)" $(Q) $(PATCH) -s -N -l -p1 -d $(DROPBEAR_UNPACKNAME) -i $(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)patch$(DELIM)0001-guard-platform-declarations.patch; true $(Q) $(PATCH) -s -N -l -p1 -d $(DROPBEAR_UNPACKNAME) -i $(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)patch$(DELIM)0002-use-nuttx-passwd-auth.patch; true $(Q) $(PATCH) -s -N -l -p1 -d $(DROPBEAR_UNPACKNAME) -i $(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)patch$(DELIM)0003-allow-localoptions-to-override-tracking-malloc.patch; true $(Q) $(PATCH) -s -N -l -p1 -d $(DROPBEAR_UNPACKNAME) -i $(APPDIR)$(DELIM)netutils$(DELIM)dropbear$(DELIM)patch$(DELIM)0004-use-nuttx-unused-macro.patch; true @echo "Generating default_options_guard.h" $(Q) sh $(DROPBEAR_UNPACKNAME)$(DELIM)src$(DELIM)ifndef_wrapper.sh \ < $(DROPBEAR_UNPACKNAME)$(DELIM)src$(DELIM)default_options.h \ > $(DROPBEAR_UNPACKNAME)$(DELIM)src$(DELIM)default_options_guard.h $(Q) touch $(DROPBEAR_UNPACKNAME) ifeq ($(wildcard $(DROPBEAR_UNPACKNAME)/.git),) context:: $(DROPBEAR_UNPACKNAME) clean:: $(call DELFILE, port$(DELIM)*.o) distclean:: $(call DELDIR, $(DROPBEAR_UNPACKNAME)) $(call DELFILE, $(DROPBEAR_ZIP)) endif endif include $(APPDIR)/Application.mk