diff --git a/client/Makefile b/client/Makefile index d3c969b9c..59c08f144 100644 --- a/client/Makefile +++ b/client/Makefile @@ -4,11 +4,6 @@ # the license. #----------------------------------------------------------------------------- -# reveng will compile without macros, but these may be useful: -# Add -DBMPMACRO to use bitmap size constant macros (edit config.h) -# Add -DNOFORCE to disable the -F switch -# Add -DPRESETS to compile with preset models (edit config.h) - # Must be called before any Makefile include ROOT_DIR:=$(dir $(realpath $(lastword $(MAKEFILE_LIST)))) @@ -22,44 +17,45 @@ vpath %.dic dictionaries OBJDIR = obj LDLIBS ?= -L/usr/local/lib -LDLIBS += -lreadline -lm -ifneq ($(SKIPPTHREAD),1) -LDLIBS += -lpthread + +ifeq ($(platform),Darwin) + # cf brew info qt: qt not symlinked anymore + PKG_CONFIG_ENV := PKG_CONFIG_PATH=/usr/local/opt/qt/lib/pkgconfig endif -# RPi Zero gcc requires -latomic -# but MacOSX /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld -# doesn't recognize option --as-needed -ifneq ($(platform),Darwin) - LDLIBS += -Wl,--as-needed -latomic -Wl,--no-as-needed -endif +################### +# local libraries # +################### -# local libraries -LUALIBPATH = ./deps/liblua -LUALIBINC = -I$(LUALIBPATH) -LUALIB = $(LUALIBPATH)/liblua.a -JANSSONLIBPATH = ./deps/jansson -JANSSONLIBINC = -I$(JANSSONLIBPATH) -JANSSONLIB = $(JANSSONLIBPATH)/libjansson.a -CBORLIBPATH = ./deps/tinycbor -CBORLIBINC = -I$(CBORLIBPATH) -CBORLIB = $(CBORLIBPATH)/tinycbor.a -REVENGLIBPATH = ./deps/reveng -REVENGLIBINC = -I$(REVENGLIBPATH) -REVENGLIB = $(REVENGLIBPATH)/libreveng.a +## Amiibo AMIIBOLIBPATH = ./deps/amiitool AMIIBOLIBINC = -I$(AMIIBOLIBPATH) AMIIBOLIB = $(AMIIBOLIBPATH)/libamiibo.a -HARDNESTEDLIBPATH = ./deps/hardnested -HARDNESTEDLIBINC = -I$(HARDNESTEDLIBPATH) -HARDNESTEDLIB = $(HARDNESTEDLIBPATH)/libhardnested.a + +## Tinycbor +CBORLIBPATH = ./deps/tinycbor +CBORLIBINC = -I$(CBORLIBPATH) +CBORLIB = $(CBORLIBPATH)/tinycbor.a + +## Cliparser / Argtable3 CLIPARSERLIBPATH = ./deps/cliparser CLIPARSERLIBINC = -I$(CLIPARSERLIBPATH) CLIPARSERLIB = $(CLIPARSERLIBPATH)/libcliparser.a -WAILIBPATH = ./deps/whereami -WAILIBINC = -I$(WAILIBPATH) -WAILIB = $(WAILIBPATH)/libwhereami.a +## Hardnested +HARDNESTEDLIBPATH = ./deps/hardnested +HARDNESTEDLIBINC = -I$(HARDNESTEDLIBPATH) +HARDNESTEDLIB = $(HARDNESTEDLIBPATH)/libhardnested.a + +## Jansson +JANSSONLIBPATH = ./deps/jansson +JANSSONLIBINC = -I$(JANSSONLIBPATH) +JANSSONLIB = $(JANSSONLIBPATH)/libjansson.a + +## Lua +LUALIBPATH = ./deps/liblua +LUALIBINC = -I$(LUALIBPATH) +LUALIB = $(LUALIBPATH)/liblua.a LUAPLATFORM = generic ifneq (,$(findstring MINGW,$(platform))) LUAPLATFORM = mingw @@ -72,85 +68,195 @@ else endif endif -# common libraries +## Reveng +REVENGLIBPATH = ./deps/reveng +REVENGLIBINC = -I$(REVENGLIBPATH) +REVENGLIB = $(REVENGLIBPATH)/libreveng.a + +## Whereami +WAILIBPATH = ./deps/whereami +WAILIBINC = -I$(WAILIBPATH) +WAILIB = $(WAILIBPATH)/libwhereami.a + +########################## +# common local libraries # +########################## + +## mbed TLS MBEDTLSLIBPATH = ../common/mbedtls +MBEDTLSLIBINC = -I$(MBEDTLSLIBPATH) MBEDTLSLIB = $(OBJDIR)/libmbedtls.a + +## Zlib ZLIBPATH = ../common/zlib +ZLIBINC = -I$(ZLIBPATH) ZLIB = $(OBJDIR)/libz.a -# system libraries -ifneq ($(SKIPLUASYSTEM),1) - LUAINCLUDES = $(shell $(PKG_CONFIG_ENV) pkg-config --cflags lua5.2 2>/dev/null) - LUALDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs lua5.2 2>/dev/null) - ifneq ($(LUALDLIBS),) - LUALIB = $(LUALDLIBS) - LUALIBINC = $(LUAINCLUDES) - LUASYSTEM = 1 - endif -endif +######################################################## +# optional system libraries to replace local libraries # +######################################################## +## Amiibo +# not distributed as system library +LDLIBS += $(AMIIBOLIB) +INCLUDES += $(AMIIBOLIBINC) + +## Tinycbor +# not distributed as system library +LDLIBS += $(CBORLIB) +INCLUDES += $(CBORLIBINC) + +## Cliparser / Argtable3 +# not distributed as system library +LDLIBS += $(CLIPARSERLIB) +INCLUDES += $(CLIPARSERLIBINC) + +## Hardnested +# not distributed as system library +LDLIBS += $(HARDNESTEDLIB) +INCLUDES += $(HARDNESTEDLIBINC) + +## Jansson ifneq ($(SKIPJANSSONSYSTEM),1) JANSSONINCLUDES = $(shell $(PKG_CONFIG_ENV) pkg-config --cflags jansson 2>/dev/null) JANSSONLDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs jansson 2>/dev/null) ifneq ($(JANSSONLDLIBS),) JANSSONLIB = $(JANSSONLDLIBS) JANSSONLIBINC = $(JANSSONINCLUDES) - JANSSONSYSTEM = 1 + JANSSON_FOUND = 1 endif endif +LDLIBS += $(JANSSONLIB) +INCLUDES += $(JANSSONLIBINC) +## Lua +ifneq ($(SKIPLUASYSTEM),1) + LUAINCLUDES = $(shell $(PKG_CONFIG_ENV) pkg-config --cflags lua5.2 2>/dev/null) + LUALDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs lua5.2 2>/dev/null) + ifneq ($(LUALDLIBS),) + LUALIB = $(LUALDLIBS) + LUALIBINC = $(LUAINCLUDES) + LUA_FOUND = 1 + endif +endif +LDLIBS += $(LUALIB) +INCLUDES += $(LUALIBINC) + +## mbed TLS +# system library cannot be used because it is compiled by default without CMAC support +LDLIBS +=$(MBEDTLSLIB) +INCLUDES += $(MBEDTLSLIBINC) + +## Reveng +# not distributed as system library +LDLIBS += $(REVENGLIB) +INCLUDES += $(REVENGLIBINC) + +## Whereami ifneq ($(SKIPWHEREAMISYSTEM),1) ifneq (,$(wildcard /usr/include/whereami.h)) WAILIB = -lwhereami WAILIBINC = - WAISYSTEM = 1 + WAI_FOUND = 1 endif endif +LDLIBS += $(WAILIB) +INCLUDES += $(WAILIBINC) -ifneq ($(SKIPBT),1) - BTLDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs bluez 2>/dev/null) +## Zlib +# system library useable? Need to recompress hardnested tables? +LDLIBS +=$(ZLIB) +INCLUDES += $(ZLIBINC) + +#################### +# system libraries # +#################### + +## Atomic +# RPi Zero gcc requires -latomic +# but MacOSX /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld +# doesn't recognize option --as-needed +ifneq ($(platform),Darwin) + LDLIBS += -Wl,--as-needed -latomic -Wl,--no-as-needed endif +## Bluez (optional) +ifneq ($(SKIPBT),1) + BTINCLUDES = $(shell $(PKG_CONFIG_ENV) pkg-config --cflags bluez 2>/dev/null) + BTLDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs bluez 2>/dev/null) + ifneq ($(BTLDLIBS),) + BTLIB = $(BTLDLIBS) + BTLIBINC = $(BTINCLUDES) + BT_FOUND = 1 + endif +endif +LDLIBS += $(BTLIB) +INCLUDES += $(BTLIBINC) + +## Readline +ifeq ($(platform),Darwin) + LDLIBS += -L/usr/local/opt/readline/lib + INCLUDES += -I/usr/local/opt/readline/include +endif +LDLIBS += -lreadline + +## Math +LDLIBS += -lm + +## Pthread +# Some have no pthread, e.g. termux +ifneq ($(SKIPPTHREAD),1) + LDLIBS += -lpthread +endif + +## QT5 (or QT4 fallback) (optional) ifneq ($(SKIPQT),1) # Check for correctly configured Qt5 QTINCLUDES = $(shell $(PKG_CONFIG_ENV) pkg-config --cflags Qt5Core Qt5Widgets 2>/dev/null) QTLDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs Qt5Core Qt5Widgets 2>/dev/null) MOC = $(shell $(PKG_CONFIG_ENV) pkg-config --variable=host_bins Qt5Core)/moc UIC = $(shell $(PKG_CONFIG_ENV) pkg-config --variable=host_bins Qt5Core)/uic - ifeq ($(QTINCLUDES), ) - # if Qt5 not found check for correctly configured Qt4 + ifneq ($(QTLDLIBS),) + QT5_FOUND = 1 + else + # if Qt5 not found check for correctly configured Qt4 QTINCLUDES = $(shell $(PKG_CONFIG_ENV) pkg-config --cflags QtCore QtGui 2>/dev/null) QTLDLIBS = $(shell $(PKG_CONFIG_ENV) pkg-config --libs QtCore QtGui 2>/dev/null) MOC = $(shell $(PKG_CONFIG_ENV) pkg-config --variable=moc_location QtCore) UIC = $(shell $(PKG_CONFIG_ENV) pkg-config --variable=uic_location QtCore) - else - # On OSX Qt5 is claiming for a C++11 compiler (gnu++14 works too, but if nothing it fails) - QT5FOUND = 1 endif - ifeq ($(QTINCLUDES), ) - # if both pkg-config commands failed, search in common places - ifneq ($(QTDIR), ) - QTINCLUDES = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui - QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4 + ifeq ($(QTLDLIBS),) + # if both pkg-config commands failed, search in common places + ifneq ($(QTDIR),) ifneq ($(wildcard $(QTDIR)/include/QtWidgets),) - QTINCLUDES += -I$(QTDIR)/include/QtWidgets - QTLDLIBS = -L$(QTDIR)/lib -lQt5Widgets -lQt5Gui -lQt5Core - QT5FOUND = 1 + # QT5 + QTINCLUDES = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui -I$(QTDIR)/include/QtWidgets + QTLDLIBS = -L$(QTDIR)/lib -lQt5Core -lQt5Gui -lQt5Widgets + QT5_FOUND = 1 + else + # QT4 + QTINCLUDES = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui + QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4 endif MOC = $(QTDIR)/bin/moc UIC = $(QTDIR)/bin/uic endif endif + ifneq ($(QTLDLIBS),) + QT_FOUND = 1 + endif endif +LDLIBS += $(QTLDLIBS) +CXXINCLUDES += $(QTINCLUDES) -LIBS = $(LUALIBINC) $(MBEDTLSLIBINC) $(JANSSONLIBINC) $(CBORLIBINC) $(ZLIBINC) $(REVENGLIBINC) $(AMIIBOLIBINC) $(HARDNESTEDLIBINC) $(CLIPARSERLIBINC) $(WAILIBINC) -INCLUDES_CLIENT += -I./src -I../include -I../common -I../common_fpga $(LIBS) +####################################################################################################### CFLAGS ?= $(DEFCFLAGS) - # We cannot just use CFLAGS+=... because it has impact on sub-makes if CFLAGS is defined in env: -PM3CFLAGS = $(CFLAGS) $(INCLUDES_CLIENT) +PM3CFLAGS = $(CFLAGS) +PM3CFLAGS += -I./src -I../include -I../common -I../common_fpga $(INCLUDES) # WIP Testing -#PM3CFLAGS = $(CFLAGS) -std=c11 -pedantic $(INCLUDES_CLIENT) +#PM3CFLAGS += -std=c11 -pedantic + PREFIX ?= /usr/local ifneq (,$(findstring MINGW,$(platform))) # Mingw uses by default Microsoft printf, we want the GNU printf (e.g. for %z) @@ -160,220 +266,254 @@ ifneq (,$(findstring MINGW,$(platform))) PM3CFLAGS += -D_ISOC99_SOURCE PM3CFLAGS += -mno-ms-bitfields -fexec-charset=cp850 endif -ifeq ($(platform),Darwin) - OBJCSRCS = util_darwin.m - LDFLAGS += -framework Foundation -framework AppKit - LDLIBS := -L/usr/local/opt/readline/lib $(LDLIBS) - LIBS := -I/usr/local/opt/readline/include $(LIBS) - # cf brew info qt: qt not symlinked anymore - PKG_CONFIG_ENV := PKG_CONFIG_PATH=/usr/local/opt/qt/lib/pkgconfig -endif -CXXFLAGS ?= -Wall -Werror -O3 -PM3CXXFLAGS = $(CXXFLAGS) -I../include - -ifneq ($(BTLDLIBS),) +ifeq ($(BT_FOUND),1) PM3CFLAGS += -DHAVE_BLUEZ endif -ifneq ($(QTLDLIBS),) - QTGUISRCS = proxgui.cpp proxguiqt.cpp proxguiqt.moc.cpp - QTGUIOBJS = $(OBJDIR)/proxgui.o $(OBJDIR)/proxguiqt.o $(OBJDIR)/proxguiqt.moc.o +CXXFLAGS ?= -Wall -Werror -O3 +PM3CXXFLAGS = $(CXXFLAGS) +PM3CXXFLAGS += -I../include + +ifeq ($(QT_FOUND),1) PM3CFLAGS += -DHAVE_GUI PM3CXXFLAGS += -DQT_NO_DEBUG - ifeq ($(QT5FOUND),1) + ifeq ($(QT5_FOUND),1) + # On OSX Qt5 is claiming for a C++11 compiler (gnu++14 works too, but if nothing it fails) PM3CXXFLAGS += -fPIC -std=c++11 endif -else - QTGUISRCS = guidummy.cpp - QTGUIOBJS = $(OBJDIR)/guidummy.o endif +PM3LDFLAGS = $(LDFLAGS) +ifeq ($(platform),Darwin) + PM3LDFLAGS += -framework Foundation -framework AppKit +endif + +################### +# printing status # +################### + $(info ===================================================================) $(info Client platform: $(platform)) + ifeq ($(SKIPQT),1) -$(info GUI support: skipped) -else ifneq ($(QTLDLIBS),) -$(info GUI support: QT found, enabled) + $(info GUI support: skipped) +else ifeq ($(QT_FOUND),1) + ifeq ($(QT5_FOUND),1) + $(info GUI support: QT5 found, enabled) + else + $(info GUI support: QT4 found, enabled) + endif else -$(info GUI support: QT not found, disabled) + $(info GUI support: QT not found, disabled) endif + ifeq ($(SKIPBT),1) -$(info native BT support: skipped) + $(info native BT support: skipped) else ifneq ($(BTLDLIBS),) -$(info native BT support: Bluez found, enabled) + $(info native BT support: Bluez found, enabled) else -$(info native BT support: Bluez not found, disabled) + $(info native BT support: Bluez not found, disabled) endif -ifeq ($(JANSSONSYSTEM),1) -$(info Jansson library: system library found) + +ifeq ($(JANSSON_FOUND),1) + $(info Jansson library: system library found) endif -ifeq ($(LUASYSTEM),1) -$(info Lua library: system library found) + +ifeq ($(LUA_FOUND),1) + $(info Lua library: system library found) endif -ifeq ($(WAISYSTEM),1) -$(info Whereami library: system library found) + +ifeq ($(WAI_FOUND),1) + $(info Whereami library: system library found) endif + $(info compiler version: $(shell $(CC) --version|head -n 1)) $(info ===================================================================) +################ +# dependencies # +################ + # Flags to generate temporary dependency files DEPFLAGS = -MT $@ -MMD -MP -MF $(OBJDIR)/$*.Td # make temporary to final dependency files after successful compilation POSTCOMPILE = $(MV) -f $(OBJDIR)/$*.Td $(OBJDIR)/$*.d && $(TOUCH) $@ -CORESRCS = uart/uart_posix.c \ - uart/uart_win32.c \ - ui.c \ - commonutil.c \ - util.c \ - util_posix.c \ - scandir.c \ - crc16.c \ - crc32.c \ - comms.c \ - version.c +################ +# enumerations # +################ -CMDSRCS = crapto1/crapto1.c \ - crapto1/crypto1.c \ - mifare/mifaredefault.c \ - mifare/mfkey.c \ - tea.c \ - fido/additional_ca.c \ - fido/cose.c \ - fido/cbortools.c \ - fido/fidocore.c \ - crypto/asn1dump.c \ - crypto/libpcrypto.c\ - crypto/asn1utils.c\ - loclass/cipher.c \ - loclass/cipherutils.c \ - loclass/ikeys.c \ - loclass/elite_crack.c \ - fileutils.c \ - mifare/mifarehost.c \ - parity.c \ - crc.c \ - crc64.c \ - legic_prng.c \ - iso15693tools.c \ - prng.c \ - generator.c \ - graph.c \ - cmddata.c \ - lfdemod.c \ - emv/crypto_polarssl.c\ - emv/crypto.c\ - emv/emv_pk.c\ - emv/emv_pki.c\ - emv/emv_pki_priv.c\ - emv/test/cryptotest.c\ - emv/apduinfo.c \ - emv/dump.c \ - emv/tlv.c \ - emv/emv_tags.c \ - emv/dol.c \ - emv/emvjson.c\ - emv/emvcore.c \ - emv/test/crypto_test.c\ - emv/test/sda_test.c\ - emv/test/dda_test.c\ - emv/test/cda_test.c\ - emv/cmdemv.c \ - emv/emv_roca.c \ - mifare/mifare4.c \ - mifare/mad.c \ - mifare/ndef.c \ - mifare/desfire_crypto.c \ - cmdanalyse.c \ - cmdhf.c \ - cmdhflist.c \ - aidsearch.c \ - cmdhf14a.c \ - cmdhf14b.c \ - cmdhf15.c \ - cmdhfepa.c \ - cmdhflegic.c \ - cmdhficlass.c \ - cmdhfmf.c \ - cmdhfmfu.c \ - cmdhfmfp.c \ - cmdhfmfhard.c \ - cmdhfmfdes.c \ - cmdhftopaz.c \ - cmdhffido.c \ - cmdhffelica.c \ - cmdhfthinfilm.c \ - cmdhfcryptorf.c \ - cmdhflto.c \ - cmdhw.c \ - cmdlf.c \ - cmdlfawid.c \ - cmdlfcotag.c \ - cmdlfem4x.c \ - cmdlffdx.c \ - cmdlfguard.c \ - cmdlfgallagher.c \ - cmdlfhid.c \ - cmdlfhitag.c \ - cmdlfio.c \ - cmdlfindala.c \ - cmdlfjablotron.c \ - cmdlfkeri.c \ - cmdlfnexwatch.c \ - cmdlfnedap.c \ - cmdlfnoralsy.c \ - cmdlfpac.c \ - cmdlfparadox.c \ - cmdlfpcf7931.c \ - cmdlfpresco.c \ - cmdlfpyramid.c \ - cmdlfsecurakey.c \ - cmdlft55xx.c \ - cmdlfti.c \ - cmdlfviking.c \ - cmdlfvisa2000.c \ - cmdlfmotorola.c \ - cmdtrace.c \ - cmdflashmem.c \ - cmdflashmemspiffs.c \ - cmdsmartcard.c \ - cmdusart.c \ - cmdwiegand.c \ - cmdparser.c \ - cmdmain.c \ - pm3_binlib.c \ - scripting.c \ - cmdscript.c \ - pm3_bitlib.c \ - cmdcrc.c \ - bucketsort.c \ - flash.c \ - wiegand_formats.c \ - wiegand_formatutils.c \ - cardhelper.c \ - preferences.c \ - jansson_path.c +SRCS = aidsearch.c \ + cmdanalyse.c \ + cmdcrc.c \ + cmddata.c \ + cmdflashmem.c \ + cmdflashmemspiffs.c \ + cmdhf.c \ + cmdhf14a.c \ + cmdhf14b.c \ + cmdhf15.c \ + cmdhfcryptorf.c \ + cmdhfepa.c \ + cmdhffelica.c \ + cmdhffido.c \ + cmdhficlass.c \ + cmdhflegic.c \ + cmdhflist.c \ + cmdhflto.c \ + cmdhfmf.c \ + cmdhfmfdes.c \ + cmdhfmfhard.c \ + cmdhfmfu.c \ + cmdhfmfp.c \ + cmdhfthinfilm.c \ + cmdhftopaz.c \ + cmdhw.c \ + cmdlf.c \ + cmdlfawid.c \ + cmdlfcotag.c \ + cmdlfem4x.c \ + cmdlffdx.c \ + cmdlfguard.c \ + cmdlfgallagher.c \ + cmdlfhid.c \ + cmdlfhitag.c \ + cmdlfindala.c \ + cmdlfio.c \ + cmdlfjablotron.c \ + cmdlfkeri.c \ + cmdlfmotorola.c \ + cmdlfnedap.c \ + cmdlfnexwatch.c \ + cmdlfnoralsy.c \ + cmdlfpac.c \ + cmdlfparadox.c \ + cmdlfpcf7931.c \ + cmdlfpresco.c \ + cmdlfpyramid.c \ + cmdlfsecurakey.c \ + cmdlft55xx.c \ + cmdlfti.c \ + cmdlfviking.c \ + cmdlfvisa2000.c \ + cmdmain.c \ + cmdparser.c \ + cmdscript.c \ + cmdsmartcard.c \ + cmdtrace.c \ + cmdusart.c \ + cmdwiegand.c \ + comms.c \ + crypto/asn1dump.c \ + crypto/asn1utils.c\ + crypto/libpcrypto.c\ + emv/apduinfo.c \ + emv/cmdemv.c \ + emv/crypto.c\ + emv/crypto_polarssl.c\ + emv/dol.c \ + emv/dump.c \ + emv/emv_pk.c\ + emv/emv_pki.c\ + emv/emv_pki_priv.c\ + emv/emv_roca.c \ + emv/emv_tags.c \ + emv/emvcore.c \ + emv/emvjson.c\ + emv/tlv.c \ + emv/test/crypto_test.c\ + emv/test/cryptotest.c\ + emv/test/cda_test.c\ + emv/test/dda_test.c\ + emv/test/sda_test.c\ + fido/additional_ca.c \ + fido/cose.c \ + fido/cbortools.c \ + fido/fidocore.c \ + fileutils.c \ + flash.c \ + generator.c \ + graph.c \ + jansson_path.c \ + loclass/cipher.c \ + loclass/cipherutils.c \ + loclass/elite_crack.c \ + loclass/ikeys.c \ + mifare/desfire_crypto.c \ + mifare/mad.c \ + mifare/mfkey.c \ + mifare/mifare4.c \ + mifare/mifaredefault.c \ + mifare/mifarehost.c \ + mifare/ndef.c \ + pm3_binlib.c \ + pm3_bitlib.c \ + preferences.c \ + prng.c \ + proxmark3.c \ + scandir.c \ + uart/uart_posix.c \ + uart/uart_win32.c \ + scripting.c \ + tea.c \ + ui.c \ + util.c \ + version.c \ + wiegand_formats.c \ + wiegand_formatutils.c -COREOBJS = $(CORESRCS:%.c=$(OBJDIR)/%.o) -CMDOBJS = $(CMDSRCS:%.c=$(OBJDIR)/%.o) -OBJCOBJS = $(OBJCSRCS:%.m=$(OBJDIR)/%.o) +# common +SRCS += bucketsort.c \ + cardhelper.c \ + crapto1/crapto1.c \ + crapto1/crypto1.c \ + crc.c \ + crc16.c \ + crc32.c \ + crc64.c \ + commonutil.c \ + iso15693tools.c \ + legic_prng.c \ + lfdemod.c \ + parity.c \ + util_posix.c + +# gui +ifeq ($(QT_FOUND),1) + CXXSRCS = proxgui.cpp proxguiqt.cpp proxguiqt.moc.cpp +else + CXXSRCS = guidummy.cpp +endif + +# OS X +ifeq ($(platform),Darwin) + OBJCSRCS = util_darwin.m +endif + +OBJS = $(SRCS:%.c=$(OBJDIR)/%.o) +OBJS += $(CXXSRCS:%.cpp=$(OBJDIR)/%.o) +OBJS += $(OBJCSRCS:%.m=$(OBJDIR)/%.o) BINS = proxmark3 + CLEAN = $(BINS) src/version.c src/*.moc.cpp src/ui/ui_overlays.h lualibs/pm3_cmd.lua lualibs/mfc_default_keys.lua # transition: cleaning also old path stuff CLEAN += flasher *.moc.cpp ui/ui_overlays.h +########### +# targets # +########### + # need to assign dependancies to build these first... all: $(BINS) all-static: LDLIBS:=-static $(LDLIBS) all-static: $(BINS) -proxmark3: LDLIBS+=$(LUALIB) $(JANSSONLIB) $(MBEDTLSLIB) $(CBORLIB) $(ZLIB) $(REVENGLIB) $(AMIIBOLIB) $(HARDNESTEDLIB) $(CLIPARSERLIB) $(WAILIB) $(BTLDLIBS) $(QTLDLIBS) -proxmark3: $(OBJDIR)/proxmark3.o $(COREOBJS) $(CMDOBJS) $(OBJCOBJS) $(QTGUIOBJS) liblua jansson tinycbor reveng mbedtls zlib amiibo hardnested cliparser whereami lualibs/pm3_cmd.lua lualibs/mfc_default_keys.lua +proxmark3: $(OBJS) liblua jansson tinycbor reveng mbedtls zlib amiibo hardnested cliparser whereami lualibs/pm3_cmd.lua lualibs/mfc_default_keys.lua $(info [=] LD $@) - $(Q)$(LD) $(LDFLAGS) $(OBJDIR)/proxmark3.o $(COREOBJS) $(CMDOBJS) $(OBJCOBJS) $(QTGUIOBJS) $(LDLIBS) -o $@ + $(Q)$(LD) $(PM3LDFLAGS) $(OBJS) $(LDLIBS) -o $@ src/proxgui.cpp: src/ui/ui_overlays.h @@ -434,15 +574,18 @@ tarbin: $(BINS) $(info [=] TAR ../proxmark3-$(platform)-bin.tar) $(Q)$(TAR) $(TARFLAGS) ../proxmark3-$(platform)-bin.tar $(BINS:%=client/%) $(WINBINS:%=client/%) -# local libraries: +########################### +# local libraries targets # +########################### + liblua: -ifneq ($(LUASYSTEM),1) +ifneq ($(LUA_FOUND),1) $(info [*] MAKE $@ for $(LUAPLATFORM)) $(Q)$(MAKE) --no-print-directory -C $(LUALIBPATH) $(LUAPLATFORM) endif jansson: -ifneq ($(JANSSONSYSTEM),1) +ifneq ($(JANSSON_FOUND),1) $(info [*] MAKE $@) $(Q)$(MAKE) --no-print-directory -C $(JANSSONLIBPATH) all endif @@ -468,7 +611,7 @@ cliparser: $(Q)$(MAKE) --no-print-directory -C $(CLIPARSERLIBPATH) all whereami: -ifneq ($(WAISYSTEM),1) +ifneq ($(WAI_FOUND),1) $(info [*] MAKE $@) $(Q)$(MAKE) --no-print-directory -C $(WAILIBPATH) all endif @@ -482,6 +625,10 @@ zlib: $(info [*] MAKE $@) $(Q)$(MAKE) --no-print-directory -C $(ZLIBPATH) OBJDIR=$(ROOT_DIR)$(OBJDIR) BINDIR=$(ROOT_DIR)$(OBJDIR) all +######## +# misc # +######## + .PHONY: all clean install uninstall tarbin liblua jansson tinycbor reveng hardnested amiibo cliparser whereami mbedtls zlib # version.c should be remade on every compilation @@ -503,7 +650,7 @@ $(OBJDIR)/%.o : %.c $(OBJDIR)/%.d $(OBJDIR)/%.o : %.cpp $(OBJDIR)/%.d $(info [-] CXX $<) $(Q)$(MKDIR) $(dir $@) - $(Q)$(CXX) $(DEPFLAGS) $(PM3CXXFLAGS) $(QTINCLUDES) -c -o $@ $< + $(Q)$(CXX) $(DEPFLAGS) $(PM3CXXFLAGS) $(CXXINCLUDES) -c -o $@ $< $(Q)$(POSTCOMPILE) %.o: %.m @@ -513,10 +660,9 @@ $(OBJDIR)/%.o : %.m $(OBJDIR)/%.d $(Q)$(CC) $(DEPFLAGS) $(PM3CFLAGS) -c -o $@ $< $(Q)$(POSTCOMPILE) -DEPENDENCY_FILES = $(patsubst %.c, $(OBJDIR)/%.d, $(CORESRCS) $(CMDSRCS)) \ - $(patsubst %.cpp, $(OBJDIR)/%.d, $(QTGUISRCS)) \ - $(patsubst %.m, $(OBJDIR)/%.d, $(OBJCSRCS)) \ - $(OBJDIR)/proxmark3.d +DEPENDENCY_FILES = $(patsubst %.c, $(OBJDIR)/%.d, $(SRCS)) \ + $(patsubst %.cpp, $(OBJDIR)/%.d, $(CXXSRCS)) \ + $(patsubst %.m, $(OBJDIR)/%.d, $(OBJCSRCS)) $(DEPENDENCY_FILES): ; .PRECIOUS: $(DEPENDENCY_FILES) diff --git a/client/deps/CMakeLists.txt b/client/deps/CMakeLists.txt index ac42065bf..a3908ec26 100644 --- a/client/deps/CMakeLists.txt +++ b/client/deps/CMakeLists.txt @@ -1,10 +1,30 @@ -include(cliparser.cmake) -include(tinycbor.cmake) -include(jansson.cmake) -include(lua.cmake) -include(mbedtls.cmake) -include(amiibo.cmake) -include(reveng.cmake) -include(zlib.cmake) -include(hardnested.cmake) -include(whereami.cmake) +if (NOT TARGET pm3rrg_rdv4_amiibo) + include(amiibo.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_cliparser) + include(cliparser.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_hardnested) + include(hardnested.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_jansson) + include(jansson.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_lua) + include(lua.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_mbedtls) + include(mbedtls.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_reveng) + include(reveng.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_tinycbor) + include(tinycbor.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_whereami) + include(whereami.cmake) +endif() +if (NOT TARGET pm3rrg_rdv4_z) + include(zlib.cmake) +endif() diff --git a/client/deps/amiibo.cmake b/client/deps/amiibo.cmake index 34780f597..23c7a7b57 100644 --- a/client/deps/amiibo.cmake +++ b/client/deps/amiibo.cmake @@ -11,6 +11,14 @@ add_library(pm3rrg_rdv4_amiibo STATIC amiitool/keygen.c ) +if (NOT TARGET pm3rrg_rdv4_mbedtls) + include(mbedtls.cmake) +endif() +find_library(pm3rrg_rdv4_mbedtls REQUIRED) +target_link_libraries(pm3rrg_rdv4_amiibo PRIVATE + readline + m + pm3rrg_rdv4_mbedtls) target_include_directories(pm3rrg_rdv4_amiibo PRIVATE ../../include ../../common) target_include_directories(pm3rrg_rdv4_amiibo INTERFACE amiitool) target_compile_options(pm3rrg_rdv4_amiibo PRIVATE -Wall -Werror -O3) diff --git a/client/deps/amiitool/Makefile b/client/deps/amiitool/Makefile index 7fe532878..dd064227e 100644 --- a/client/deps/amiitool/Makefile +++ b/client/deps/amiitool/Makefile @@ -1,5 +1,5 @@ MYSRCPATHS = -MYINCLUDES = -I. -I.. -I../jansson -I../../../common -I../../../include +MYINCLUDES = -I. -I.. -I../jansson -I../../../common -I../../../common/mbedtls -I../../../include MYCFLAGS = MYDEFS = MYSRCS = \ diff --git a/client/deps/amiitool/amiibo.c b/client/deps/amiitool/amiibo.c index ad41220bb..cbe3a0ba0 100644 --- a/client/deps/amiitool/amiibo.c +++ b/client/deps/amiitool/amiibo.c @@ -6,8 +6,8 @@ */ #include "amiibo.h" -#include "mbedtls/md.h" -#include "mbedtls/aes.h" +#include "md.h" +#include "aes.h" #include "commonutil.h" #define HMAC_POS_DATA 0x008 diff --git a/client/deps/amiitool/drbg.c b/client/deps/amiitool/drbg.c index c1297920f..1aaba0a7f 100644 --- a/client/deps/amiitool/drbg.c +++ b/client/deps/amiitool/drbg.c @@ -8,7 +8,7 @@ #include "drbg.h" #include #include -#include "mbedtls/md.h" +#include "md.h" void nfc3d_drbg_init(nfc3d_drbg_ctx *ctx, const uint8_t *hmacKey, size_t hmacKeySize, const uint8_t *seed, size_t seedSize) { assert(ctx != NULL); diff --git a/client/deps/mbedtls.cmake b/client/deps/mbedtls.cmake index 63e706889..b18537c84 100644 --- a/client/deps/mbedtls.cmake +++ b/client/deps/mbedtls.cmake @@ -45,5 +45,6 @@ add_library(pm3rrg_rdv4_mbedtls STATIC ) target_include_directories(pm3rrg_rdv4_mbedtls PRIVATE ../../common) +target_include_directories(pm3rrg_rdv4_mbedtls INTERFACE ../../common/mbedtls) target_compile_options(pm3rrg_rdv4_mbedtls PRIVATE -Wall -Werror -O3) set_property(TARGET pm3rrg_rdv4_mbedtls PROPERTY POSITION_INDEPENDENT_CODE ON) diff --git a/client/deps/zlib.cmake b/client/deps/zlib.cmake index 645cbc88d..3a77c35aa 100644 --- a/client/deps/zlib.cmake +++ b/client/deps/zlib.cmake @@ -9,5 +9,6 @@ add_library(pm3rrg_rdv4_z STATIC ) target_compile_definitions(pm3rrg_rdv4_z PRIVATE Z_SOLO NO_GZIP ZLIB_PM3_TUNED) +target_include_directories(pm3rrg_rdv4_z INTERFACE ../../common/zlib) target_compile_options(pm3rrg_rdv4_z PRIVATE -Wall -Werror -O3) set_property(TARGET pm3rrg_rdv4_z PROPERTY POSITION_INDEPENDENT_CODE ON) diff --git a/client/src/cmdflashmem.c b/client/src/cmdflashmem.c index e1761a81b..e90e6025c 100644 --- a/client/src/cmdflashmem.c +++ b/client/src/cmdflashmem.c @@ -18,8 +18,8 @@ #include "comms.h" //getfromdevice #include "cmdflashmemspiffs.h" // spiffs commands -#include "mbedtls/rsa.h" -#include "mbedtls/sha1.h" +#include "rsa.h" +#include "sha1.h" #define MCK 48000000 #define FLASH_MINFAST 24000000 //33000000 diff --git a/client/src/cmdhffelica.c b/client/src/cmdhffelica.c index f7b7b00e3..1fcf23fa3 100644 --- a/client/src/cmdhffelica.c +++ b/client/src/cmdhffelica.c @@ -22,7 +22,7 @@ #include "util.h" #include "ui.h" #include "mifare.h" // felica_card_select_t struct -#include "mbedtls/des.h" +#include "des.h" #define AddCrc(data, len) compute_crc(CRC_FELICA, (data), (len), (data)+(len)+1, (data)+(len)) static int CmdHelp(const char *Cmd); diff --git a/client/src/cmdhficlass.c b/client/src/cmdhficlass.c index 61aea9de6..3026f3964 100644 --- a/client/src/cmdhficlass.c +++ b/client/src/cmdhficlass.c @@ -18,7 +18,7 @@ #include "cmdtrace.h" #include "util_posix.h" #include "comms.h" -#include "mbedtls/des.h" +#include "des.h" #include "loclass/cipherutils.h" #include "loclass/cipher.h" #include "loclass/ikeys.h" diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index a39bd85c0..5e9a49c26 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -17,7 +17,7 @@ #include "comms.h" #include "ui.h" #include "cmdhf14a.h" -#include "mbedtls/aes.h" +#include "aes.h" #include "crypto/libpcrypto.h" #include "protocols.h" #include "cmdtrace.h" diff --git a/client/src/cmdhfmfdesfire_disabled.c b/client/src/cmdhfmfdesfire_disabled.c index e2d43630f..e2de33485 100644 --- a/client/src/cmdhfmfdesfire_disabled.c +++ b/client/src/cmdhfmfdesfire_disabled.c @@ -14,8 +14,8 @@ #include "cmdhfmf.h" #include "util.h" -#include "mbedtls/des.h" -#include "mbedtls/aes.h" +#include "des.h" +#include "aes.h" static int CmdHelp(const char *Cmd); diff --git a/client/src/cmdhfmfhard.c b/client/src/cmdhfmfhard.c index 52e3e4108..383a9676f 100644 --- a/client/src/cmdhfmfhard.c +++ b/client/src/cmdhfmfhard.c @@ -35,7 +35,7 @@ #include "hardnested_bruteforce.h" #include "hardnested_bf_core.h" #include "hardnested_bitarray_core.h" -#include "zlib/zlib.h" +#include "zlib.h" #include "fileutils.h" #define NUM_CHECK_BITFLIPS_THREADS (num_CPUs()) @@ -220,7 +220,7 @@ static void inflate_free(voidpf opaque, voidpf address) { #define INPUT_BUFFER_LEN 80 //---------------------------------------------------------------------------- -// Initialize decompression of the respective (HF or LF) FPGA stream +// Initialize decompression of the respective bitflip_bitarray stream //---------------------------------------------------------------------------- static void init_inflate(z_streamp compressed_stream, uint8_t *input_buffer, uint32_t insize, uint8_t *output_buffer, uint32_t outsize) { diff --git a/client/src/cmdhfmfu.c b/client/src/cmdhfmfu.c index b9dc8d3a2..efd10210d 100644 --- a/client/src/cmdhfmfu.c +++ b/client/src/cmdhfmfu.c @@ -12,7 +12,7 @@ #include "cmdparser.h" #include "commonutil.h" #include "crypto/libpcrypto.h" -#include "mbedtls/des.h" +#include "des.h" #include "cmdhfmf.h" #include "cmdhf14a.h" #include "comms.h" diff --git a/client/src/emv/crypto_polarssl.c b/client/src/emv/crypto_polarssl.c index 9d18a370b..0d582c7b3 100644 --- a/client/src/emv/crypto_polarssl.c +++ b/client/src/emv/crypto_polarssl.c @@ -23,8 +23,8 @@ #include #include -#include "mbedtls/rsa.h" -#include "mbedtls/sha1.h" +#include "rsa.h" +#include "sha1.h" struct crypto_hash_polarssl { struct crypto_hash ch; diff --git a/client/src/emv/emv_roca.c b/client/src/emv/emv_roca.c index 521120b05..1bebcacbf 100644 --- a/client/src/emv/emv_roca.c +++ b/client/src/emv/emv_roca.c @@ -24,7 +24,7 @@ #include "emv_roca.h" #include "ui.h" // Print... -#include "mbedtls/bignum.h" +#include "bignum.h" static uint8_t g_primes[ROCA_PRINTS_LENGTH] = { 11, 13, 17, 19, 37, 53, 61, 71, 73, 79, 97, 103, 107, 109, 127, 151, 157 diff --git a/client/src/emv/test/cryptotest.c b/client/src/emv/test/cryptotest.c index f343ebbea..bb59de7fa 100644 --- a/client/src/emv/test/cryptotest.c +++ b/client/src/emv/test/cryptotest.c @@ -12,19 +12,19 @@ #include "util.h" #include "ui.h" -#include "mbedtls/bignum.h" -#include "mbedtls/aes.h" -#include "mbedtls/cmac.h" -#include "mbedtls/des.h" -#include "mbedtls/ecp.h" -#include "mbedtls/rsa.h" -#include "mbedtls/sha1.h" -#include "mbedtls/md5.h" -#include "mbedtls/x509.h" -#include "mbedtls/base64.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/entropy.h" -#include "mbedtls/timing.h" +#include "bignum.h" +#include "aes.h" +#include "cmac.h" +#include "des.h" +#include "ecp.h" +#include "rsa.h" +#include "sha1.h" +#include "md5.h" +#include "x509.h" +#include "base64.h" +#include "ctr_drbg.h" +#include "entropy.h" +#include "timing.h" #include "crypto_test.h" #include "sda_test.h" diff --git a/client/src/fido/fidocore.c b/client/src/fido/fidocore.c index 32d7c9ff0..3cddbc5a9 100644 --- a/client/src/fido/fidocore.c +++ b/client/src/fido/fidocore.c @@ -17,7 +17,7 @@ #include "emv/emvcore.h" #include "emv/emvjson.h" #include "cbortools.h" -#include "mbedtls/x509_crt.h" +#include "x509_crt.h" #include "crypto/asn1utils.h" #include "crypto/libpcrypto.h" #include "additional_ca.h" diff --git a/client/src/loclass/elite_crack.c b/client/src/loclass/elite_crack.c index cc9570351..83e2a9146 100644 --- a/client/src/loclass/elite_crack.c +++ b/client/src/loclass/elite_crack.c @@ -45,7 +45,7 @@ #include "ikeys.h" #include "elite_crack.h" #include "fileutils.h" -#include "mbedtls/des.h" +#include "des.h" #include "util_posix.h" /** diff --git a/client/src/loclass/ikeys.c b/client/src/loclass/ikeys.c index f50d276dc..cf14450bd 100644 --- a/client/src/loclass/ikeys.c +++ b/client/src/loclass/ikeys.c @@ -70,7 +70,7 @@ From "Dismantling iclass": #include "fileutils.h" #include "cipherutils.h" -#include "mbedtls/des.h" +#include "des.h" uint8_t pi[35] = { 0x0F, 0x17, 0x1B, 0x1D, 0x1E, 0x27, 0x2B, 0x2D, diff --git a/client/src/mifare/desfire_crypto.c b/client/src/mifare/desfire_crypto.c index 2cb9d7c3a..6dd2de26d 100644 --- a/client/src/mifare/desfire_crypto.c +++ b/client/src/mifare/desfire_crypto.c @@ -29,8 +29,8 @@ #include #include #include "commonutil.h" -#include "mbedtls/aes.h" -#include "mbedtls/des.h" +#include "aes.h" +#include "des.h" #include "ui.h" #include "crc.h" #include "crc16.h" // crc16 ccitt diff --git a/client/src/scripting.c b/client/src/scripting.c index 4a3bab49c..a5c466ea4 100644 --- a/client/src/scripting.c +++ b/client/src/scripting.c @@ -21,8 +21,8 @@ #include "mifare/mifarehost.h" #include "crc.h" #include "crc64.h" -#include "mbedtls/sha1.h" -#include "mbedtls/aes.h" +#include "sha1.h" +#include "aes.h" #include "cmdcrc.h" #include "cmdhfmfhard.h" #include "cmdhfmfu.h"