diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index a8e8edc790d5aab40893bbe3ddb0deaa2fd72be9..b026989140fa8b81cf7306a237eaa24be814ed3e --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ -build -bin -config.mk +build +bin +config.mk +data/certificates/* +!data/certificates/profiles +!data/certificates/Makefile diff --git a/Makefile b/Makefile index a771918ca973fcac2531b7e1440b845fe16fb951..97cfa1118df543922a24882841db224e75678545 100644 --- a/Makefile +++ b/Makefile @@ -1,150 +1,150 @@ --include config.mk - -ifeq (,$(ATS)) - $(error ATS shall be defined) -endif - -ifeq (,$(TOPDIR)) - TOPDIR := . -endif - -ifeq (,$(TTCN3_DIR)) - $(error TTCN3_DIR shall be defined in config.mk) -endif - -export ASN1C_PATH - -first: all - -define IncludeModule -undefine sources -undefine modules -undefine includes -include $(1)/module.mk -$$(foreach S, $$(sources), $$(eval all_sources += $$(if $$(filter /%, $$(S)), $$(TOPDIR)/$$(S), $(1)/$$(S)))) -$$(foreach I, $$(includes), $$(eval all_includes += $$(if $$(filter /%, $$(I)), $$(TOPDIR)/$$(I), $(1)/$$(I)))) -$$(foreach M, $$(modules), $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(TOPDIR)/$$(M), $(1)/$$(M))))) -endef - -all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src $(TOPDIR)/ccsrc/Framework /usr/include/jsoncpp -defines += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) -libs += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs - -ifeq (Windows_NT,$(OS)) -# Silence linker warnings. -LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc -defines += WIN32 -libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR)) -all_includes += $(addsuffix /include, $(OPENSSL_DIR)) -libs += $(WPCAP_DLL_PATH) -else -defines += LINUX -libs += -lpcap -lrt -lpthread -endif - -libs += -lssl -lcrypto -lxml2 -ljsoncpp - -$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS))) - -outdir := $(TOPDIR)/build/$(ATS) -bindir := $(TOPDIR)/bin - -sources := $(sort $(all_sources)) -includes := $(outdir) $(outdir)/.. $(outdir)/../asn1 $(all_includes) $(NPCAP_INCLUDE) - -ifeq (Windows_NT,$(OS)) - EXE=.exe -endif - -ttcn_sources := $(filter %.ttcn , $(sources)) -ttcn3_sources := $(filter %.ttcn3, $(sources)) -asn_sources := $(filter %.asn, $(sources)) -asn1_sources := $(filter %.asn1, $(sources)) - -tt_sources := $(ttcn_sources) $(ttcn3_sources) $(asn_sources) $(asn1_sources) -cc_sources := $(filter %.cc, $(sources)) - -gen_ttcn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.cc, $(ttcn_sources)))) -gen_ttcn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.hh, $(ttcn_sources)))) -gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources)))) -gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources)))) -gen_asn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.cc, $(asn_sources)))) -gen_asn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.hh, $(asn_sources)))) -gen_asn1_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.cc, $(asn1_sources)))) -gen_asn1_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.hh, $(asn1_sources)))) - -gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_asn_sources) $(gen_asn1_sources) -gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_asn_headers) $(gen_asn1_headers) - -gen_objects := $(patsubst %.cc, %.o, $(gen_sources)) -cc_objects := $(patsubst %.cc, $(outdir)/%.o, $(cc_sources)) - -.PHONY: all FORCE echo - -all: $(bindir) $(outdir) $(bindir)/$(ATS)$(EXE) - -echo_sources: - @echo -e "$(addsuffix \n,$(all_sources))" - -echo: echo_sources - @echo -e "sources:\n $(addsuffix \n, $(sources))" - @echo -e "gen_sources:\n $(addsuffix \n, $(gen_sources))" - @echo -e "gen_objects:\n $(addsuffix \n, $(gen_objects))" - @echo -e "cc_objects:\n $(addsuffix \n, $(cc_objects))" - @echo -e "includes:\n $(addsuffix \n, $(includes))" - @echo -e "defines: $(addsuffix \n, $(defines))" - -clean: - rm -f $(outdir)/$(ATS)$(EXE) $(gen_objects) $(gen_sources) $(gen_headers) $(cc_objects) $(outdir)/.generate $(outdir)/../libItsAsn.so -# rm -f $(outdir)/asn1/*.so $(outdir)/asn1/*.o $(outdir)/asn1/*.c $(outdir)/asn1/*.h $(outdir)/asn1/Makefile.am.libasncodec - -regen: force_regen $(outdir)/.generate -force_regen: - rm -f $(outdir)/.generate - -t3q: all - @echo -e "Code checking in progress..." - @java -Xmx3g -Xss512m -jar $(T3Q_PATH)/t3q.jar --config $(T3Q_PATH)/$(T3Q_CONFIG) $(tt_sources) > $(outdir)/t3q.out 2>&1 ; cd - - @echo -e "Code checking in done..." - @echo -e "Output file is located here: $(outdir)/t3q.out" - -t3d: all - @echo -e "TTCN-3 doc generation in progress..." - @java -Xmx3g -Xss512m -jar $(T3D_PATH)/t3d.jar --config $(T3D_PATH)/$(T3D_CONFIG) $(tt_sources) > $(outdir)/t3d.out 2>&1 ; cd - - @echo -e "TTCN-3 doc generation done..." - @echo -e "Output file is located here: $(outdir)/t3d.out" - -$(outdir) $(bindir): - mkdir -p $@ - -$(bindir)/$(ATS)$(EXE): $(outdir)/../asn1/libItsAsn.a $(gen_objects) $(cc_objects) - g++ -g -O0 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(outdir)/../asn1/libItsAsn.a $(libs) - -$(gen_objects) :%.o :%.cc - g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< - -$(cc_objects) : $(outdir)/%.o : %.cc - mkdir -p $(dir $@) - g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< - -#$(gen_sources): -# $(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources) - -$(gen_sources): $(outdir)/.generate - -$(outdir)/.generate: Makefile $(tt_sources) - $(TTCN3_DIR)/bin/compiler -w -d -e -f -g -l -L -R -U none -x -X -o $(outdir) $(tt_sources) - touch $@ - -$(bindir)/libItsAsn.so: $(outdir)/asn1/libItsAsn.so - cp -f $< $@ - -$(outdir)/../asn1/libItsAsn.a: FORCE - mkdir -p $(outdir)/../asn1 - $(MAKE) -C $(outdir)/../asn1 -f ../../asn1/Makefile - -$(foreach S, $(ttcn_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc, $(S))): $(S))) -$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S))) -$(foreach S, $(asn_sources), $(eval $(outdir)/$(notdir $(patsubst %.asn, %.cc, $(S))): $(S))) -$(foreach S, $(asn1_sources), $(eval $(outdir)/$(notdir $(patsubst %.asn1, %.cc, $(S))): $(S))) - +-include config.mk + +ifeq (,$(ATS)) + $(error ATS shall be defined) +endif + +ifeq (,$(TOPDIR)) + TOPDIR := . +endif + +ifeq (,$(TTCN3_DIR)) + $(error TTCN3_DIR shall be defined in config.mk) +endif + +export ASN1C_PATH + +first: all + +define IncludeModule +undefine sources +undefine modules +undefine includes +include $(1)/module.mk +$$(foreach S, $$(sources), $$(eval all_sources += $$(if $$(filter /%, $$(S)), $$(TOPDIR)/$$(S), $(1)/$$(S)))) +$$(foreach I, $$(includes), $$(eval all_includes += $$(if $$(filter /%, $$(I)), $$(TOPDIR)/$$(I), $(1)/$$(I)))) +$$(foreach M, $$(modules), $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(TOPDIR)/$$(M), $(1)/$$(M))))) +endef + +all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src $(TOPDIR)/ccsrc/Framework /usr/include/jsoncpp +defines += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) +libs += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs + +ifeq (Windows_NT,$(OS)) +# Silence linker warnings. +LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc +defines += WIN32 +libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR)) +all_includes += $(addsuffix /include, $(OPENSSL_DIR)) +libs += $(WPCAP_DLL_PATH) +else +defines += LINUX +libs += -lpcap -lrt -lpthread +endif + +libs += -lssl -lcrypto -lxml2 -ljsoncpp + +$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS))) + +outdir := $(TOPDIR)/build/$(ATS) +bindir := $(TOPDIR)/bin + +sources := $(sort $(all_sources)) +includes := $(outdir) $(outdir)/.. $(outdir)/../asn1 $(all_includes) $(NPCAP_INCLUDE) + +ifeq (Windows_NT,$(OS)) + EXE=.exe +endif + +ttcn_sources := $(filter %.ttcn , $(sources)) +ttcn3_sources := $(filter %.ttcn3, $(sources)) +asn_sources := $(filter %.asn, $(sources)) +asn1_sources := $(filter %.asn1, $(sources)) + +tt_sources := $(ttcn_sources) $(ttcn3_sources) $(asn_sources) $(asn1_sources) +cc_sources := $(filter %.cc, $(sources)) + +gen_ttcn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.cc, $(ttcn_sources)))) +gen_ttcn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.hh, $(ttcn_sources)))) +gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources)))) +gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources)))) +gen_asn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.cc, $(asn_sources)))) +gen_asn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn, %.hh, $(asn_sources)))) +gen_asn1_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.cc, $(asn1_sources)))) +gen_asn1_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1, %.hh, $(asn1_sources)))) + +gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_asn_sources) $(gen_asn1_sources) +gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_asn_headers) $(gen_asn1_headers) + +gen_objects := $(patsubst %.cc, %.o, $(gen_sources)) +cc_objects := $(patsubst %.cc, $(outdir)/%.o, $(cc_sources)) + +.PHONY: all FORCE echo + +all: $(bindir) $(outdir) $(bindir)/$(ATS)$(EXE) + +echo_sources: + @echo -e "$(addsuffix \n,$(all_sources))" + +echo: echo_sources + @echo -e "sources:\n $(addsuffix \n, $(sources))" + @echo -e "gen_sources:\n $(addsuffix \n, $(gen_sources))" + @echo -e "gen_objects:\n $(addsuffix \n, $(gen_objects))" + @echo -e "cc_objects:\n $(addsuffix \n, $(cc_objects))" + @echo -e "includes:\n $(addsuffix \n, $(includes))" + @echo -e "defines: $(addsuffix \n, $(defines))" + +clean: + rm -f $(outdir)/$(ATS)$(EXE) $(gen_objects) $(gen_sources) $(gen_headers) $(cc_objects) $(outdir)/.generate $(outdir)/../libItsAsn.so +# rm -f $(outdir)/asn1/*.so $(outdir)/asn1/*.o $(outdir)/asn1/*.c $(outdir)/asn1/*.h $(outdir)/asn1/Makefile.am.libasncodec + +regen: force_regen $(outdir)/.generate +force_regen: + rm -f $(outdir)/.generate + +t3q: all + @echo -e "Code checking in progress..." + @java -Xmx3g -Xss512m -jar $(T3Q_PATH)/t3q.jar --config $(T3Q_PATH)/$(T3Q_CONFIG) $(tt_sources) > $(outdir)/t3q.out 2>&1 ; cd - + @echo -e "Code checking in done..." + @echo -e "Output file is located here: $(outdir)/t3q.out" + +t3d: all + @echo -e "TTCN-3 doc generation in progress..." + @java -Xmx3g -Xss512m -jar $(T3D_PATH)/t3d.jar --config $(T3D_PATH)/$(T3D_CONFIG) $(tt_sources) > $(outdir)/t3d.out 2>&1 ; cd - + @echo -e "TTCN-3 doc generation done..." + @echo -e "Output file is located here: $(outdir)/t3d.out" + +$(outdir) $(bindir): + mkdir -p $@ + +$(bindir)/$(ATS)$(EXE): $(outdir)/../asn1/libItsAsn.a $(gen_objects) $(cc_objects) + g++ -g -O0 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(outdir)/../asn1/libItsAsn.a $(libs) + +$(gen_objects) :%.o :%.cc + g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +$(cc_objects) : $(outdir)/%.o : %.cc + mkdir -p $(dir $@) + g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +#$(gen_sources): +# $(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources) + +$(gen_sources): $(outdir)/.generate + +$(outdir)/.generate: Makefile $(tt_sources) + $(TTCN3_DIR)/bin/compiler -w -d -e -f -g -l -L -R -U none -x -X -o $(outdir) $(tt_sources) + touch $@ + +$(bindir)/libItsAsn.so: $(outdir)/asn1/libItsAsn.so + cp -f $< $@ + +$(outdir)/../asn1/libItsAsn.a: FORCE + mkdir -p $(outdir)/../asn1 + $(MAKE) -C $(outdir)/../asn1 -f ../../asn1/Makefile + +$(foreach S, $(ttcn_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc, $(S))): $(S))) +$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S))) +$(foreach S, $(asn_sources), $(eval $(outdir)/$(notdir $(patsubst %.asn, %.cc, $(S))): $(S))) +$(foreach S, $(asn1_sources), $(eval $(outdir)/$(notdir $(patsubst %.asn1, %.cc, $(S))): $(S))) + diff --git a/ccsrc/Protocols/Security/security_services.cc b/ccsrc/Protocols/Security/security_services.cc index 876e2f8c955ca4251165244d9820f28b07dcbec4..59aae19d625cad1df14a91d8ac6abb7899f71212 100644 --- a/ccsrc/Protocols/Security/security_services.cc +++ b/ccsrc/Protocols/Security/security_services.cc @@ -189,19 +189,19 @@ int security_services::process_ieee_1609_dot2_signed_data(const Ieee1609Dot2::Si // Check p2pcdLearningRequest keys if present if (header_info.p2pcdLearningRequest().is_present()) { - loggers::get_instance().error("security_services::process_ieee_1609_dot2_signed_data: p2pcdLearningRequest not supported yet"); + loggers::get_instance().warning("security_services::process_ieee_1609_dot2_signed_data: p2pcdLearningRequest not supported yet"); // TODO Not supported by C-ITS Protocol } // Check missingCrlIdentifier keys if present if (header_info.missingCrlIdentifier().is_present()) { - loggers::get_instance().error("security_services::process_ieee_1609_dot2_signed_data: missingCrlIdentifier not supported yet"); + loggers::get_instance().warning("security_services::process_ieee_1609_dot2_signed_data: missingCrlIdentifier not supported yet"); // TODO Not supported by C-ITS Protocol } // Check encryption keys if present if (header_info.encryptionKey().is_present()) { - loggers::get_instance().error("security_services::process_ieee_1609_dot2_signed_data: encryptionKey not supported yet"); + loggers::get_instance().warning("security_services::process_ieee_1609_dot2_signed_data: encryptionKey not supported yet"); // TODO Not supported by C-ITS Protocol } @@ -219,7 +219,7 @@ int security_services::process_ieee_1609_dot2_signed_data(const Ieee1609Dot2::Si // Check requested certificate if (header_info.requestedCertificate().is_present()) { - loggers::get_instance().error("security_services::process_ieee_1609_dot2_signed_data: requestedCertificate not supported yet"); + // loggers::get_instance().error("security_services::process_ieee_1609_dot2_signed_data: requestedCertificate not supported yet"); // TODO Not supported by C-ITS Protocol } @@ -1268,7 +1268,7 @@ int security_services::extract_verification_keys(const Ieee1609Dot2::Certificate p_public_key_x = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP256().uncompressedP256().x(); p_public_key_y = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP256().uncompressedP256().y(); } else { - loggers::get_instance().error("security_services::extract_verification_keys: Unsupported VerificationKey"); + loggers::get_instance().error("security_services::extract_verification_keys: Unsupported ecdsaNistP256 VerificationKey point type %d", p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP256().get_selection()); return -1; } } else if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ischosen(Ieee1609Dot2BaseTypes::PublicVerificationKey::ALT_ecdsaBrainpoolP256r1)) { @@ -1290,7 +1290,13 @@ int security_services::extract_verification_keys(const Ieee1609Dot2::Certificate Ieee1609Dot2BaseTypes::EccP256CurvePoint::ALT_uncompressedP256)) { p_public_key_x = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP256r1().uncompressedP256().x(); p_public_key_y = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP256r1().uncompressedP256().y(); - } else if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ischosen(Ieee1609Dot2BaseTypes::PublicVerificationKey::ALT_ecdsaBrainpoolP384r1)) { + } else { + loggers::get_instance().error("security_services::extract_verification_keys: Unsupported ecdsaBrainpoolP256r1 VerificationKey point type %d", p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP256r1().get_selection()); + return -1; + } + } else if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ischosen(Ieee1609Dot2BaseTypes::PublicVerificationKey::ALT_ecdsaBrainpoolP384r1)) { + if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP384r1().ischosen( + Ieee1609Dot2BaseTypes::EccP384CurvePoint::ALT_compressed__y__0)) { p_public_comp_key = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP384r1().compressed__y__0(); security_ecc ecc(ec_elliptic_curves::brainpool_p_384_r1, p_public_comp_key, ecc_compressed_mode::compressed_y_0); p_public_key_x = ecc.public_key_x(); @@ -1308,11 +1314,34 @@ int security_services::extract_verification_keys(const Ieee1609Dot2::Certificate p_public_key_x = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP384r1().uncompressedP384().x(); p_public_key_y = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP384r1().uncompressedP384().y(); } else { - loggers::get_instance().error("security_services::extract_verification_keys: Unsupported VerificationKey"); + loggers::get_instance().error("security_services::extract_verification_keys: Unsupported ecdsaBrainpoolP384r1 VerificationKey point type %d", p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaBrainpoolP384r1().get_selection()); + return -1; + } + } else if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ischosen(Ieee1609Dot2BaseTypes::PublicVerificationKey::ALT_ecdsaNistP384)) { + if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().ischosen( + Ieee1609Dot2BaseTypes::EccP384CurvePoint::ALT_compressed__y__0)) { + p_public_comp_key = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().compressed__y__0(); + security_ecc ecc(ec_elliptic_curves::nist_p_384, p_public_comp_key, ecc_compressed_mode::compressed_y_0); + p_public_key_x = ecc.public_key_x(); + p_public_key_y = ecc.public_key_y(); + p_public_comp_key_mode = INTEGER(0); + } else if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().ischosen( + Ieee1609Dot2BaseTypes::EccP384CurvePoint::ALT_compressed__y__1)) { + p_public_comp_key = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().compressed__y__1(); + security_ecc ecc(ec_elliptic_curves::nist_p_384, p_public_comp_key, ecc_compressed_mode::compressed_y_1); + p_public_key_x = ecc.public_key_x(); + p_public_key_y = ecc.public_key_y(); + p_public_comp_key_mode = INTEGER(1); + } else if (p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().ischosen( + Ieee1609Dot2BaseTypes::EccP384CurvePoint::ALT_uncompressedP384)) { + p_public_key_x = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().uncompressedP384().x(); + p_public_key_y = p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().uncompressedP384().y(); + } else { + loggers::get_instance().error("security_services::extract_verification_keys: Unsupported ecdsaNistP384 VerificationKey point type %d", p_cert.toBeSigned().verifyKeyIndicator().verificationKey().ecdsaNistP384().get_selection()); return -1; } } else { - loggers::get_instance().error("security_services::extract_verification_keys: Unsupported VerificationKey"); + loggers::get_instance().error("security_services::extract_verification_keys: Unsupported VerificationKey curve %d", p_cert.toBeSigned().verifyKeyIndicator().verificationKey().get_selection()); return -1; } diff --git a/config.mk b/config.mk index a53d762fb085e8a68fada33fbc9c8ddaedc342e5..d6cfe1577d033fc7c92940773d2bd1dca9493124 100644 --- a/config.mk +++ b/config.mk @@ -1,5 +1,5 @@ -#TTCN3_DIR := /cygdrive/c/Tools/Titan -ASN1C_PATH := /home/yann/frameworks/asn1c.denis +#TTCN3_DIR := /cygdrive/c/Tools/Titan +#ASN1C_PATH := /home/yann/frameworks/asn1c.denis #WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll #NPCAP_INCLUDE := /cygdrive/c/PROGRA~1/Npcap/sdk/include #T3Q_PATH=./tools/t3q-v2.0.0b30 diff --git a/data/certificates/Makefile b/data/certificates/Makefile index 48581942a8fcbe24ca56302c175a43c6ca9e2aaa..c5745c0972d0d951e87553424ce680673353e3a3 100644 --- a/data/certificates/Makefile +++ b/data/certificates/Makefile @@ -1,48 +1,88 @@ -ifeq ($(ARCH),) - ARCH = $(shell gcc -dumpmachine) -else - ifeq ($(OS),Windows_NT) - ARCH=msvc - endif -endif - -outdir=certificates -in=profiles -xerdir=xer -depdir=temp -keydir=certificates - -ifeq ($(ARCH),msvc) - asn1certgen= ../../../itscertgen/build/msvc/x64/Debug/certgen.exe -else - asn1certgen=../../../itscertgen/build/$(ARCH)-d/certgen -endif - -xsl_cvt=../../../itscertgen/certgen/asn1certgen.xslt -xsl_dep=../../../itscertgen/certgen/prof2dep.xsl - -profiles=$(wildcard $(in)/*.xml) -certificates_oer=$(patsubst $(in)/%.xml, $(outdir)/%.oer, $(profiles)) -certificates_xer=$(patsubst $(in)/%.xml, $(xerdir)/%.xer, $(profiles)) -deps=$(patsubst $(in)/%.xml, $(depdir)/%.dep, $(profiles)) - -all: $(sort $(outdir) $(xerdir) $(depdir)) $(certificates_oer) - -$(sort $(outdir) $(xerdir) $(depdir)): - mkdir -p $@ -clean: - rm -f $(certificates_oer) $(certificates_xer) - -$(certificates_xer): $(xerdir)/%.xer : $(in)/%.xml - xsltproc $(xsl_cvt) $< | xmllint --format -o $@ - - -$(certificates_oer): $(outdir)/%.oer : $(xerdir)/%.xer - $(asn1certgen) -o $(outdir) -K $(keydir) $< - -$(deps): $(depdir)/%.dep : $(in)/%.xml - -mkdir -p $(depdir) - xsltproc --param profile "'$*'" -o $@ $(xsl_dep) $< - -$(certificates_xer) : $(xsl_cvt) - -include $(deps) +ifeq ($(ARCH),) + ARCH = $(shell gcc -dumpmachine) +else + ifeq ($(OS),Windows_NT) + ARCH=msvc + endif +endif + +ifeq (,$(CERTGEN)) + $(error CERTGEN variable shall point to the certgen project) +endif + +outdir=certificates +in=profiles +xerdir=xer +depdir=temp +keydir=certificates +iutdir=iut + +ifeq ($(ARCH),msvc) + asn1certgen= $(CERTGEN)/build/msvc/x64/Debug/certgen.exe +else + asn1certgen=$(CERTGEN)/build/$(ARCH)-d/certgen +endif + +xsl_cvt=$(CERTGEN)/itscertgen/certgen/asn1certgen.xslt +xsl_dep=$(CERTGEN)/itscertgen/certgen/prof2dep.xsl + +profiles=$(wildcard $(in)/*.xml) +certificates_oer=$(patsubst $(in)/%.xml, $(outdir)/%.oer, $(profiles)) +certificates_xer=$(patsubst $(in)/%.xml, $(xerdir)/%.xer, $(profiles)) +deps=$(patsubst $(in)/%.xml, $(depdir)/%.dep, $(profiles)) + +all: $(sort $(outdir) $(xerdir) $(depdir)) $(certificates_oer) + +$(sort $(outdir) $(xerdir) $(depdir) $(iutdir)): + mkdir -p $@ +clean: + rm -f $(certificates_oer) $(certificates_xer) + +$(certificates_xer): $(xerdir)/%.xer : $(in)/%.xml + xsltproc $(xsl_cvt) $< | xmllint --format -o $@ - + +$(certificates_oer): $(outdir)/%.oer : $(xerdir)/%.xer + $(asn1certgen) -o $(outdir) -K $(keydir) $< + +$(deps): $(depdir)/%.dep : $(in)/%.xml + -mkdir -p $(depdir) + xsltproc --param profile "'$*'" -o $@ $(xsl_dep) $< + +$(certificates_xer) : $(xsl_cvt) + +certs_iut_at = $(filter $(outdir)/CERT_IUT_%_AT.oer, $(certificates_oer)) +vkeys_iut_at = $(patsubst %.oer, %.vkey, $(certs_iut_at)) +ekeys_iut_at = $(patsubst %.oer, %.ekey, $(certs_iut_at)) + +certs_iut := $(filter $(outdir)/CERT_IUT_%_RCA.oer, $(certificates_oer)) +certs_iut += $(filter $(outdir)/CERT_IUT_%_AA.oer, $(certificates_oer)) +certs_iut += $(certs_iut_at) + +iut_files = $(patsubst $(outdir)/%, $(iutdir)/%, $(certs_iut) $(vkeys_iut_at) $(ekeys_iut_at)) + +install: $(iutdir) $(iut_files) + +$(iut_files): $(iutdir)/%: $(outdir)/% + -cp -f $< $@ + +$(vkeys_iut_at) $(ekeys_iut_at): + +IUT_TC23 = CERT_IUT_C1_AT.oer CERT_IUT_C1_AT.vkey CERT_IUT_C1_AT.ekey CERT_IUT_CC_AA.oer CERT_IUT_C_RCA.oer CERT_TS_A_AT.oer CERT_IUT_A_AA.oer +IUT_TC24 = CERT_IUT_C2_AT.oer CERT_IUT_C2_AT.vkey CERT_IUT_C2_AT.ekey CERT_IUT_C2_AA.oer CERT_IUT_C_RCA.oer CERT_IUT_A_RCA.oer CERT_TS_A_AT.oer CERT_IUT_A_AA.oer +IUT_TC25 = CERT_IUT_A1_AT.oer CERT_IUT_A1_AT.vkey CERT_IUT_A1_AT.ekey CERT_IUT_A_AA.oer CERT_IUT_A_RCA.oer CERT_TS_A_AT.oer +IUT_TC26 = CERT_IUT_A2_AT.oer CERT_IUT_A2_AT.vkey CERT_IUT_A2_AT.ekey CERT_IUT_A_AA.oer CERT_IUT_A_RCA.oer CERT_TS_A_AT.oer +IUT_TC27 = CERT_IUT_A3_AT.oer CERT_IUT_A3_AT.vkey CERT_IUT_A3_AT.ekey CERT_IUT_A_AA.oer CERT_IUT_A_RCA.oer CERT_TS_A_AT.oer +IUT_TC28 = CERT_IUT_A_AT_A8.oer CERT_IUT_A_AT_A8.vkey CERT_IUT_A_AT_A8.ekey CERT_IUT_A_AA_A8.oer CERT_IUT_A_RCA.oer CERT_TS_A_AT.oer CERT_IUT_A_AA.oer + +IUT_TCS = TC23 TC24 TC25 TC26 TC27 TC28 + +define InstallTC +$(addprefix $(TC)/,$(IUT_$(TC))): $(TC)/% : $$(outdir)/% + mkdir -p $(TC) + -cp -f $$< $$@ +endef +$(foreach TC, $(IUT_TCS), $(eval $(InstallTC))) + +install_tc: $(foreach TC, $(IUT_TCS), $(addprefix $(TC)/, $(IUT_$(TC)))) + +include $(deps) diff --git a/data/certificates/profiles/CERT_IUT_A_RCA.xml b/data/certificates/profiles/CERT_IUT_A_RCA.xml index bbd4d0533d995d392ba1a3e8dae5d644412ac95d..b8865e7e8e621259569e910a2b1b2d525102de80 100644 --- a/data/certificates/profiles/CERT_IUT_A_RCA.xml +++ b/data/certificates/profiles/CERT_IUT_A_RCA.xml @@ -30,7 +30,7 @@ - + 01 FE/FF 01 diff --git a/data/certificates/profiles/CERT_IUT_C1_AT.xml b/data/certificates/profiles/CERT_IUT_C1_AT.xml index b568a19193b54fef3b24d1bc7886c6dbf7bd6623..05061fa5c270e94e23c73190a06d7646413ac59d 100644 --- a/data/certificates/profiles/CERT_IUT_C1_AT.xml +++ b/data/certificates/profiles/CERT_IUT_C1_AT.xml @@ -27,10 +27,12 @@ + + diff --git a/data/certificates/profiles/CERT_IUT_C2_AA.xml b/data/certificates/profiles/CERT_IUT_C2_AA.xml new file mode 100644 index 0000000000000000000000000000000000000000..5a08a554ccd40e22ecd0c994d12f91f6e981ca43 --- /dev/null +++ b/data/certificates/profiles/CERT_IUT_C2_AA.xml @@ -0,0 +1,46 @@ + + 3 + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + 01 32 + + + + + + + + + + + + + diff --git a/data/certificates/profiles/CERT_IUT_C2_AT.xml b/data/certificates/profiles/CERT_IUT_C2_AT.xml new file mode 100644 index 0000000000000000000000000000000000000000..875e1207ae1fe33000831b04275c10e527c1f746 --- /dev/null +++ b/data/certificates/profiles/CERT_IUT_C2_AT.xml @@ -0,0 +1,35 @@ + + 3 + + + + + + + + + + + + > + + + + + + + + + 01 FF FC + 01 FF FF FF + + + + + + + + + + + diff --git a/data/certificates/profiles/CERT_IUT_C_RCA.xml b/data/certificates/profiles/CERT_IUT_C_RCA.xml index d536970340be92c288728ff049416b57523831c5..e3c2c7369857e3d68ad405b011b0ef66f6851a40 100644 --- a/data/certificates/profiles/CERT_IUT_C_RCA.xml +++ b/data/certificates/profiles/CERT_IUT_C_RCA.xml @@ -29,7 +29,7 @@ - + 01 FE/FF 01 diff --git a/data/certificates/profiles/CERT_TS_A_EA.xml b/data/certificates/profiles/CERT_TS_A_EA.xml index 5a781e8a4c302be04c559b4aad422cc2a4e5d77e..a2846558e62a0e3e400688ecb7c1cf1052bb97ca 100644 --- a/data/certificates/profiles/CERT_TS_A_EA.xml +++ b/data/certificates/profiles/CERT_TS_A_EA.xml @@ -20,7 +20,7 @@ - + @@ -29,6 +29,8 @@ + + 01 C0 diff --git a/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_01.xml b/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_01.xml index 802585d02b478628b66f02a8c45c3b17e1cbfbc3..7e215b5bbd9917aeb9d9a3bbb7f801f88dfec17d 100644 --- a/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_01.xml +++ b/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_01.xml @@ -20,7 +20,7 @@ - + @@ -29,6 +29,8 @@ + + 01 C0 diff --git a/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_02.xml b/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_02.xml index 5a71c29d883d18ee20cdb12c3ad330cdf0578072..612b69a58b622a449ef4be52ace51e52e09b539c 100644 --- a/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_02.xml +++ b/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_02.xml @@ -20,7 +20,7 @@ - + @@ -29,6 +29,8 @@ + + 01 C0 diff --git a/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_03.xml b/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_03.xml index a165dd0228a95e5835dd0fc2617fe4201e2daa0e..78e89b7141ba0e22298e900831086fb1d7fcda06 100644 --- a/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_03.xml +++ b/data/certificates/profiles/CERT_TS_A_EA_AA_AUTHVAL_RCV_02_BI_03.xml @@ -20,7 +20,7 @@ - + @@ -29,6 +29,8 @@ + + 01 40 diff --git a/data/certificates/profiles/CERT_TS_FA3_AA.xml b/data/certificates/profiles/CERT_TS_FA3_AA.xml new file mode 100644 index 0000000000000000000000000000000000000000..deb8ec6d6a9f490e0da5250fc83af502d9c86a97 --- /dev/null +++ b/data/certificates/profiles/CERT_TS_FA3_AA.xml @@ -0,0 +1,44 @@ + + + 3 + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + 01 32 + + + + + + + + + + diff --git a/data/certificates/profiles/CERT_TS_FA3_AT.xml b/data/certificates/profiles/CERT_TS_FA3_AT.xml new file mode 100644 index 0000000000000000000000000000000000000000..8253bbd816fe5a67de391b9bca9614be54f07ab9 --- /dev/null +++ b/data/certificates/profiles/CERT_TS_FA3_AT.xml @@ -0,0 +1,36 @@ + + + 3 + + + + + + + + + + + + > + + + + + + + + + 01 FF FC + 01 FF FF FF + + + + + + + + + + + diff --git a/data/certificates/profiles/CERT_TS_FA_AA.xml b/data/certificates/profiles/CERT_TS_FA_AA.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb1e4a6010173efa60b85d6a9bf52530888639ff --- /dev/null +++ b/data/certificates/profiles/CERT_TS_FA_AA.xml @@ -0,0 +1,44 @@ + + + 3 + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + 01 32 + + + + + + + + + + diff --git a/data/certificates/profiles/CERT_TS_FA_AT.xml b/data/certificates/profiles/CERT_TS_FA_AT.xml new file mode 100644 index 0000000000000000000000000000000000000000..10199479c94e4e97bd9ec0ba741f1507ae84fb6f --- /dev/null +++ b/data/certificates/profiles/CERT_TS_FA_AT.xml @@ -0,0 +1,36 @@ + + + 3 + + + + + + + + + + + + > + + + + + + + + + 01 FF FC + 01 FF FF FF + + + + + + + + + + + diff --git a/ttcn/AtsSecurity b/ttcn/AtsSecurity index ac5071354fd23fa0f1ce59ded50dd894dda2e58b..84ba2164d26a0c8f744efaf89db3f715de9484ac 160000 --- a/ttcn/AtsSecurity +++ b/ttcn/AtsSecurity @@ -1 +1 @@ -Subproject commit ac5071354fd23fa0f1ce59ded50dd894dda2e58b +Subproject commit 84ba2164d26a0c8f744efaf89db3f715de9484ac