Loading ccsrc/Protocols/Http/http_codec.cc +23 −16 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ #include "LibItsHttp_MessageBodyTypes.hh" #include "LibItsHttp_XmlMessageBodyTypes.hh" #include "http_etsi_ieee1609dot2_codec.hh" // FIXME Work-around, to be removed int http_codec::encode (const LibItsHttp__TypesAndValues::HttpMessage& msg, OCTETSTRING& data) { loggers::get_instance().log_msg(">>> http_codec::encode: ", (const Base_Type&)msg); Loading Loading @@ -375,7 +377,6 @@ int http_codec::decode_header(CHARSTRING& header_line, LibItsHttp__TypesAndValue int http_codec::encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody& p_message_body, OCTETSTRING& p_encoding_buffer, const std::string& p_content_type) { loggers::get_instance().log_msg(">>> http_codec::encode_body: ", (const Base_Type&)p_message_body); loggers::get_instance().log("http_codec::encode_body: # of codecs=%d - %p", _codecs.size(), this); // Sanity check if (p_content_type.empty()) { Loading @@ -390,11 +391,13 @@ int http_codec::encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody& } else { std::map<std::string, std::unique_ptr<codec<Record_Type, Record_Type> > >::const_iterator it; bool processed = false; loggers::get_instance().log("http_codec::encode_body: # of codecs=%d - %p", _codecs.size(), this); if (p_content_type.find("x-its") != std::string::npos) { loggers::get_instance().log("http_codec::encode_body: Find x-its"); it = _codecs.find("http_its"); // TODO Use params if (it != _codecs.cend()) { loggers::get_instance().log("http_codec::encode_body: Call 'http_etsi_ieee1609dot2_codec'"); _codecs["http_its"]->encode((Record_Type&)binary_body, p_encoding_buffer); // TODO Use params _codecs["http_its"]->encode((Record_Type&)binary_body.ieee1609dot2__data(), p_encoding_buffer); // TODO Use params processed = true; } } // TODO Add new HTTP message codec here Loading Loading @@ -451,7 +454,6 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod loggers::get_instance().log(">>> http_codec::decode_body"); loggers::get_instance().log_to_hexa("http_codec::decode_body", decoding_buffer); loggers::get_instance().log("http_codec::decode_body: Content-Type=%s", p_content_type.c_str()); loggers::get_instance().log("http_codec::decode_body: # of codecs=%d - %p", _codecs.size(), this); // Sanity checks if (decoding_buffer.get_len() - decoding_buffer.get_pos() <= 0) { Loading Loading @@ -502,29 +504,34 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod loggers::get_instance().log("http_codec::decode_body: Binary mode: %x", _dc.is_binary); LibItsHttp__MessageBodyTypes::HttpMessageBody v; if (_dc.is_binary == 0x01) { LibItsHttp__BinaryMessageBodyTypes::BinaryBody bb; LibItsHttp__BinaryMessageBodyTypes::BinaryBody binary_body; bool processed = false; // TODO To be refined adding a string identifier to check which codec to use. E.g. held_code.id() returns "xmlns=\"urn:ietf:params:xml:ns:geopriv:held\">" if (p_content_type.find("x-its") != std::string::npos) { loggers::get_instance().log("http_codec::decode_body: Find 'x-its'"); /*std::for_each( _codecs.cbegin(), _codecs.cend(), [](const std::pair<const std::string, std::unique_ptr<codec<Record_Type, Record_Type> > >& p) { loggers::get_instance().log("http_codec::decode_body: Key='%s', %p", p.first.c_str(), p.second.get()); /*** FIXME: This code generate a codedump, I don't undertsand the reason. The same code works file for Ng112 HELD & LOST codec. Ununderstandable!!!! ==> Use a patch if (_codecs["http_its"].get() != nullptr) { loggers::get_instance().log("http_codec::decode_body: Call 'http_etsi_ieee1609dot2_codec'"); if (_codecs["http_its"]->decode(body, (Record_Type&)binary_body) == 0) { processed = true; } );*/ if (_codecs["http_its"].get() != nullptr) { // TODO Use params }*/ loggers::get_instance().log("http_codec::decode_body: Call 'http_etsi_ieee1609dot2_codec'"); _codecs["http_its"]->decode(body, bb.ieee1609dot2__data()); http_etsi_ieee1609dot2_codec* codec = new http_etsi_ieee1609dot2_codec(); if (codec->decode(body, binary_body.ieee1609dot2__data()) == 0) { message_body.binary__body() = binary_body; processed = true; } delete codec; } // TODO Add new HTTP message codec here if (!processed) { loggers::get_instance().warning("http_codec::decode_body: Unsupported HTTP codec, use raw field as default"); bb.raw() = body; message_body.binary__body() = bb; binary_body.raw() = body; message_body.binary__body() = binary_body; } } else { // Convert into string Loading ccsrc/Protocols/Security/http_etsi_ieee1609dot2_codec.cc +16 −21 Original line number Diff line number Diff line Loading @@ -8,13 +8,12 @@ #include "loggers.hh" int http_etsi_ieee1609dot2_codec::encode (const LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, OCTETSTRING& p_data) int http_etsi_ieee1609dot2_codec::encode (const IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, OCTETSTRING& p_data) { loggers::get_instance().log_msg(">>> http_etsi_ieee1609dot2_codec::encode: ", p_binary_body); loggers::get_instance().log_msg(">>> http_etsi_ieee1609dot2_codec::encode: ", p_ieee_1609dot2_data); if (p_binary_body.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_ieee1609dot2__data)) { // Encode the Ieee1609Dot2Data if (_codec.encode(p_binary_body.ieee1609dot2__data(), p_data) == -1) { if (_codec.encode(p_ieee_1609dot2_data, p_data) == -1) { loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: Failed to encode InnerEcRequest"); return -1; } Loading @@ -23,21 +22,17 @@ int http_etsi_ieee1609dot2_codec::encode (const LibItsHttp__BinaryMessageBodyTyp return 0; } loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: No codec found"); return -1; } int http_etsi_ieee1609dot2_codec::decode (const OCTETSTRING& p_data, LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, params* p_params) int http_etsi_ieee1609dot2_codec::decode (const OCTETSTRING& p_data, IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, params* p_params) { loggers::get_instance().log_msg(">>> http_etsi_ieee1609dot2_codec::decode: ", p_data); /*if (p_binary_body.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_innerEcResponse)) { return codec.decode(p_data, p_binary_body.innerEcResponse(), p_data); }*/ loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::decode: No codec found"); if (_codec.decode(p_data, p_ieee_1609dot2_data, p_params) == -1) { loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::decode: Failed to decode data"); return -1; } loggers::get_instance().log_msg("<<< http_etsi_ieee1609dot2_codec::decode: ", p_ieee_1609dot2_data); return 0; } http_etsi_ieee1609dot2_codec_factory http_etsi_ieee1609dot2_codec_factory::_f; ccsrc/Protocols/Security/http_etsi_ieee1609dot2_codec.hh +4 −4 Original line number Diff line number Diff line Loading @@ -8,13 +8,13 @@ namespace LibItsHttp__BinaryMessageBodyTypes { class BinaryBody; } class http_etsi_ieee1609dot2_codec : public codec<LibItsHttp__BinaryMessageBodyTypes::BinaryBody, LibItsHttp__BinaryMessageBodyTypes::BinaryBody> class http_etsi_ieee1609dot2_codec : public codec<IEEE1609dot2::Ieee1609Dot2Data, IEEE1609dot2::Ieee1609Dot2Data> { etsi_ts103097_data_codec _codec; public: explicit http_etsi_ieee1609dot2_codec() : codec<LibItsHttp__BinaryMessageBodyTypes::BinaryBody, LibItsHttp__BinaryMessageBodyTypes::BinaryBody>(), _codec() { }; explicit http_etsi_ieee1609dot2_codec() : codec<IEEE1609dot2::Ieee1609Dot2Data, IEEE1609dot2::Ieee1609Dot2Data>(), _codec() { }; virtual ~http_etsi_ieee1609dot2_codec() { }; virtual int encode (const LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, OCTETSTRING& p_data); virtual int decode (const OCTETSTRING& p_data, LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, params* params = NULL); virtual int encode (const IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, OCTETSTRING& p_data); virtual int decode (const OCTETSTRING& p_data, IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, params* params = NULL); }; etc/AtsPki/AtsPki.cfg +2 −2 Original line number Diff line number Diff line Loading @@ -114,8 +114,8 @@ system.utPort.params := "UT_CAM/UDP(dst_ip=172.23.0.1,dst_port=8000)" [EXECUTE] #ItsPki_TestCases.TC_SEC_PKI_ITSS_ENR_BV_01 ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_01 #ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_02 #ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_01 ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_02 [MAIN_CONTROLLER] # The options herein control the behavior of MC. Loading ttcn/AtsPki/ItsPki_TestCases.ttcn +57 −32 Original line number Diff line number Diff line Loading @@ -252,7 +252,41 @@ module ItsPki_TestCases { } // End of testcase f_TC_SEC_PKI_ITSS_ENR_BV_01_itss function f_TC_SEC_PKI_ITSS_ENR_BV_01_pki(in charstring p_certificate_id) runs on ItsPki /*system ItsPkiItssSystem*/ { LibItsPki_Functions.f_cfUp(); // Preamble tc_ac.start; alt { [] pkiPort.receive( mw_innerEcRequest ) { log("*** " & testcasename() & ": INFO: InnerEcRequest received ***"); repeat; } [] pkiPort.receive( mw_innerEcResponse_ok ) { tc_ac.stop; log("*** " & testcasename() & ": INFO: InnerEcResponse received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] pkiPort.receive { // FIXME Use altstep tc_ac.stop; log("*** " & testcasename() & ": INCONC: Unexpected message received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_prDone, e_timeout); } } // End of 'alt' statement // Test Body log("*** " & testcasename() & ": PASS: Message triggered ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble LibItsPki_Functions.f_cfDown(); } // End of testcase f_TC_SEC_PKI_ITSS_ENR_BV_01_pki } // End of f_TC_SEC_PKI_ITSS_ENR_BV_01 Loading Loading @@ -326,7 +360,7 @@ module ItsPki_TestCases { mw_innerEcResponse_ok ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: InnerEcReponse received ***"); log("*** " & testcasename() & ": PASS: InnerEcResponse received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] pkiPort.receive { // FIXME Use altstep Loading Loading @@ -387,11 +421,10 @@ module ItsPki_TestCases { var Oct32 v_publicKeyY; var Oct32 v_publicKeyCompressed; var integer v_compressedMode; var InnerEcRequest v_inner_ec_request; var Ieee1609Dot2Data v_inner_ec_request_signed_for_pop; var bitstring v_inner_ec_request_signed_for_pop_msg; var Ieee1609Dot2Data v_ieee1609dot2_signed_and_encrypted_data; var HeaderLines v_headers; var HttpMessage v_response; var EtsiTs102941Data v_etsi_ts_102941_data; // Test control if (not PICS_IUT_EA_ROLE) { Loading @@ -406,27 +439,7 @@ module ItsPki_TestCases { // Test adapter configuration // Preamble // Generate InnerEcRequest // TODO f_build_enrolment_request(v_private_key, v_publicKeyX, v_publicKeyY, v_publicKeyCompressed, v_compressedMode, v_ieee1609dot2_signed_and_encrypted_data); if (f_generate_inner_ec_request(v_private_key, v_publicKeyX, v_publicKeyY, v_publicKeyCompressed, v_compressedMode, v_inner_ec_request) == false) { log("*** " & testcasename() & ": FAIL: Failed to setup InnerEcRequestPoP message ***") f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); stop; } // Generate InnerEcRequestSignedForPoP if (f_generate_inner_ec_request_signed_for_pop(v_private_key, v_inner_ec_request, v_inner_ec_request_signed_for_pop) == false) { log("*** " & testcasename() & ": FAIL: Failed to setup InnerEcRequestPoP message ***") f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); stop; } // Secure InnerEcRequestSignedForPoP message v_inner_ec_request_signed_for_pop_msg := encvalue(m_etsiTs102941Data_inner_ec_request_signed_for_pop(v_inner_ec_request_signed_for_pop)); if (f_build_pki_secured_message(vc_eaPrivateKey, valueof(m_signerIdentifier_self), vc_eaHashedId8, v_publicKeyCompressed, v_compressedMode, bit2oct(v_inner_ec_request_signed_for_pop_msg), v_ieee1609dot2_signed_and_encrypted_data) == false) { log("*** " & testcasename() & ": FAIL: Failed to seucure InnerEcRequestPoP message ***") f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); stop; } log("v_ieee1609dot2_signed_and_encrypted_data = ", v_ieee1609dot2_signed_and_encrypted_data); f_http_build_enrolment_request(v_private_key, v_publicKeyX, v_publicKeyY, v_publicKeyCompressed, v_compressedMode, v_ieee1609dot2_signed_and_encrypted_data); f_init_default_headers_list(v_headers); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); Loading @@ -447,15 +460,27 @@ module ItsPki_TestCases { mw_http_response_ok( mw_http_message_body_binary( mw_binary_body_ieee1609dot2_data( mw_etsiTs103097Data_encrypted( mw_enrolmentResponseMessage( mw_encryptedData( -, mw_SymmetricCiphertext_aes128ccm ))))))) { ))))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: InnerEcReponse received ***"); if (f_verify_pki_message(vc_eaPrivateEncKey, vc_eaPeerWholeHash, vc_eaCertificate, v_response.response.body.binary_body.ieee1609dot2_data, false, v_etsi_ts_102941_data) == false) { log("*** " & testcasename() & ": FAIL: Failed to verify PKI message ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": LOG: Receive ", v_etsi_ts_102941_data, " ***"); if (not(match(v_etsi_ts_102941_data.content, mw_enrolmentResponse))) { log("*** " & testcasename() & ": FAIL: Unexpected message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: InnerEcResponse received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } } [] httpPort.receive( // FIXME Use altstep mw_http_response( mw_http_response_ko Loading Loading
ccsrc/Protocols/Http/http_codec.cc +23 −16 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ #include "LibItsHttp_MessageBodyTypes.hh" #include "LibItsHttp_XmlMessageBodyTypes.hh" #include "http_etsi_ieee1609dot2_codec.hh" // FIXME Work-around, to be removed int http_codec::encode (const LibItsHttp__TypesAndValues::HttpMessage& msg, OCTETSTRING& data) { loggers::get_instance().log_msg(">>> http_codec::encode: ", (const Base_Type&)msg); Loading Loading @@ -375,7 +377,6 @@ int http_codec::decode_header(CHARSTRING& header_line, LibItsHttp__TypesAndValue int http_codec::encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody& p_message_body, OCTETSTRING& p_encoding_buffer, const std::string& p_content_type) { loggers::get_instance().log_msg(">>> http_codec::encode_body: ", (const Base_Type&)p_message_body); loggers::get_instance().log("http_codec::encode_body: # of codecs=%d - %p", _codecs.size(), this); // Sanity check if (p_content_type.empty()) { Loading @@ -390,11 +391,13 @@ int http_codec::encode_body(const LibItsHttp__MessageBodyTypes::HttpMessageBody& } else { std::map<std::string, std::unique_ptr<codec<Record_Type, Record_Type> > >::const_iterator it; bool processed = false; loggers::get_instance().log("http_codec::encode_body: # of codecs=%d - %p", _codecs.size(), this); if (p_content_type.find("x-its") != std::string::npos) { loggers::get_instance().log("http_codec::encode_body: Find x-its"); it = _codecs.find("http_its"); // TODO Use params if (it != _codecs.cend()) { loggers::get_instance().log("http_codec::encode_body: Call 'http_etsi_ieee1609dot2_codec'"); _codecs["http_its"]->encode((Record_Type&)binary_body, p_encoding_buffer); // TODO Use params _codecs["http_its"]->encode((Record_Type&)binary_body.ieee1609dot2__data(), p_encoding_buffer); // TODO Use params processed = true; } } // TODO Add new HTTP message codec here Loading Loading @@ -451,7 +454,6 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod loggers::get_instance().log(">>> http_codec::decode_body"); loggers::get_instance().log_to_hexa("http_codec::decode_body", decoding_buffer); loggers::get_instance().log("http_codec::decode_body: Content-Type=%s", p_content_type.c_str()); loggers::get_instance().log("http_codec::decode_body: # of codecs=%d - %p", _codecs.size(), this); // Sanity checks if (decoding_buffer.get_len() - decoding_buffer.get_pos() <= 0) { Loading Loading @@ -502,29 +504,34 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod loggers::get_instance().log("http_codec::decode_body: Binary mode: %x", _dc.is_binary); LibItsHttp__MessageBodyTypes::HttpMessageBody v; if (_dc.is_binary == 0x01) { LibItsHttp__BinaryMessageBodyTypes::BinaryBody bb; LibItsHttp__BinaryMessageBodyTypes::BinaryBody binary_body; bool processed = false; // TODO To be refined adding a string identifier to check which codec to use. E.g. held_code.id() returns "xmlns=\"urn:ietf:params:xml:ns:geopriv:held\">" if (p_content_type.find("x-its") != std::string::npos) { loggers::get_instance().log("http_codec::decode_body: Find 'x-its'"); /*std::for_each( _codecs.cbegin(), _codecs.cend(), [](const std::pair<const std::string, std::unique_ptr<codec<Record_Type, Record_Type> > >& p) { loggers::get_instance().log("http_codec::decode_body: Key='%s', %p", p.first.c_str(), p.second.get()); /*** FIXME: This code generate a codedump, I don't undertsand the reason. The same code works file for Ng112 HELD & LOST codec. Ununderstandable!!!! ==> Use a patch if (_codecs["http_its"].get() != nullptr) { loggers::get_instance().log("http_codec::decode_body: Call 'http_etsi_ieee1609dot2_codec'"); if (_codecs["http_its"]->decode(body, (Record_Type&)binary_body) == 0) { processed = true; } );*/ if (_codecs["http_its"].get() != nullptr) { // TODO Use params }*/ loggers::get_instance().log("http_codec::decode_body: Call 'http_etsi_ieee1609dot2_codec'"); _codecs["http_its"]->decode(body, bb.ieee1609dot2__data()); http_etsi_ieee1609dot2_codec* codec = new http_etsi_ieee1609dot2_codec(); if (codec->decode(body, binary_body.ieee1609dot2__data()) == 0) { message_body.binary__body() = binary_body; processed = true; } delete codec; } // TODO Add new HTTP message codec here if (!processed) { loggers::get_instance().warning("http_codec::decode_body: Unsupported HTTP codec, use raw field as default"); bb.raw() = body; message_body.binary__body() = bb; binary_body.raw() = body; message_body.binary__body() = binary_body; } } else { // Convert into string Loading
ccsrc/Protocols/Security/http_etsi_ieee1609dot2_codec.cc +16 −21 Original line number Diff line number Diff line Loading @@ -8,13 +8,12 @@ #include "loggers.hh" int http_etsi_ieee1609dot2_codec::encode (const LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, OCTETSTRING& p_data) int http_etsi_ieee1609dot2_codec::encode (const IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, OCTETSTRING& p_data) { loggers::get_instance().log_msg(">>> http_etsi_ieee1609dot2_codec::encode: ", p_binary_body); loggers::get_instance().log_msg(">>> http_etsi_ieee1609dot2_codec::encode: ", p_ieee_1609dot2_data); if (p_binary_body.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_ieee1609dot2__data)) { // Encode the Ieee1609Dot2Data if (_codec.encode(p_binary_body.ieee1609dot2__data(), p_data) == -1) { if (_codec.encode(p_ieee_1609dot2_data, p_data) == -1) { loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: Failed to encode InnerEcRequest"); return -1; } Loading @@ -23,21 +22,17 @@ int http_etsi_ieee1609dot2_codec::encode (const LibItsHttp__BinaryMessageBodyTyp return 0; } loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::encode: No codec found"); return -1; } int http_etsi_ieee1609dot2_codec::decode (const OCTETSTRING& p_data, LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, params* p_params) int http_etsi_ieee1609dot2_codec::decode (const OCTETSTRING& p_data, IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, params* p_params) { loggers::get_instance().log_msg(">>> http_etsi_ieee1609dot2_codec::decode: ", p_data); /*if (p_binary_body.ischosen(LibItsHttp__BinaryMessageBodyTypes::BinaryBody::ALT_innerEcResponse)) { return codec.decode(p_data, p_binary_body.innerEcResponse(), p_data); }*/ loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::decode: No codec found"); if (_codec.decode(p_data, p_ieee_1609dot2_data, p_params) == -1) { loggers::get_instance().warning("http_etsi_ieee1609dot2_codec::decode: Failed to decode data"); return -1; } loggers::get_instance().log_msg("<<< http_etsi_ieee1609dot2_codec::decode: ", p_ieee_1609dot2_data); return 0; } http_etsi_ieee1609dot2_codec_factory http_etsi_ieee1609dot2_codec_factory::_f;
ccsrc/Protocols/Security/http_etsi_ieee1609dot2_codec.hh +4 −4 Original line number Diff line number Diff line Loading @@ -8,13 +8,13 @@ namespace LibItsHttp__BinaryMessageBodyTypes { class BinaryBody; } class http_etsi_ieee1609dot2_codec : public codec<LibItsHttp__BinaryMessageBodyTypes::BinaryBody, LibItsHttp__BinaryMessageBodyTypes::BinaryBody> class http_etsi_ieee1609dot2_codec : public codec<IEEE1609dot2::Ieee1609Dot2Data, IEEE1609dot2::Ieee1609Dot2Data> { etsi_ts103097_data_codec _codec; public: explicit http_etsi_ieee1609dot2_codec() : codec<LibItsHttp__BinaryMessageBodyTypes::BinaryBody, LibItsHttp__BinaryMessageBodyTypes::BinaryBody>(), _codec() { }; explicit http_etsi_ieee1609dot2_codec() : codec<IEEE1609dot2::Ieee1609Dot2Data, IEEE1609dot2::Ieee1609Dot2Data>(), _codec() { }; virtual ~http_etsi_ieee1609dot2_codec() { }; virtual int encode (const LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, OCTETSTRING& p_data); virtual int decode (const OCTETSTRING& p_data, LibItsHttp__BinaryMessageBodyTypes::BinaryBody& p_binary_body, params* params = NULL); virtual int encode (const IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, OCTETSTRING& p_data); virtual int decode (const OCTETSTRING& p_data, IEEE1609dot2::Ieee1609Dot2Data& p_ieee_1609dot2_data, params* params = NULL); };
etc/AtsPki/AtsPki.cfg +2 −2 Original line number Diff line number Diff line Loading @@ -114,8 +114,8 @@ system.utPort.params := "UT_CAM/UDP(dst_ip=172.23.0.1,dst_port=8000)" [EXECUTE] #ItsPki_TestCases.TC_SEC_PKI_ITSS_ENR_BV_01 ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_01 #ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_02 #ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_01 ItsPki_TestCases.TC_SEC_PKI_SND_EA_BV_02 [MAIN_CONTROLLER] # The options herein control the behavior of MC. Loading
ttcn/AtsPki/ItsPki_TestCases.ttcn +57 −32 Original line number Diff line number Diff line Loading @@ -252,7 +252,41 @@ module ItsPki_TestCases { } // End of testcase f_TC_SEC_PKI_ITSS_ENR_BV_01_itss function f_TC_SEC_PKI_ITSS_ENR_BV_01_pki(in charstring p_certificate_id) runs on ItsPki /*system ItsPkiItssSystem*/ { LibItsPki_Functions.f_cfUp(); // Preamble tc_ac.start; alt { [] pkiPort.receive( mw_innerEcRequest ) { log("*** " & testcasename() & ": INFO: InnerEcRequest received ***"); repeat; } [] pkiPort.receive( mw_innerEcResponse_ok ) { tc_ac.stop; log("*** " & testcasename() & ": INFO: InnerEcResponse received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] pkiPort.receive { // FIXME Use altstep tc_ac.stop; log("*** " & testcasename() & ": INCONC: Unexpected message received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_prDone, e_timeout); } } // End of 'alt' statement // Test Body log("*** " & testcasename() & ": PASS: Message triggered ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble LibItsPki_Functions.f_cfDown(); } // End of testcase f_TC_SEC_PKI_ITSS_ENR_BV_01_pki } // End of f_TC_SEC_PKI_ITSS_ENR_BV_01 Loading Loading @@ -326,7 +360,7 @@ module ItsPki_TestCases { mw_innerEcResponse_ok ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: InnerEcReponse received ***"); log("*** " & testcasename() & ": PASS: InnerEcResponse received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] pkiPort.receive { // FIXME Use altstep Loading Loading @@ -387,11 +421,10 @@ module ItsPki_TestCases { var Oct32 v_publicKeyY; var Oct32 v_publicKeyCompressed; var integer v_compressedMode; var InnerEcRequest v_inner_ec_request; var Ieee1609Dot2Data v_inner_ec_request_signed_for_pop; var bitstring v_inner_ec_request_signed_for_pop_msg; var Ieee1609Dot2Data v_ieee1609dot2_signed_and_encrypted_data; var HeaderLines v_headers; var HttpMessage v_response; var EtsiTs102941Data v_etsi_ts_102941_data; // Test control if (not PICS_IUT_EA_ROLE) { Loading @@ -406,27 +439,7 @@ module ItsPki_TestCases { // Test adapter configuration // Preamble // Generate InnerEcRequest // TODO f_build_enrolment_request(v_private_key, v_publicKeyX, v_publicKeyY, v_publicKeyCompressed, v_compressedMode, v_ieee1609dot2_signed_and_encrypted_data); if (f_generate_inner_ec_request(v_private_key, v_publicKeyX, v_publicKeyY, v_publicKeyCompressed, v_compressedMode, v_inner_ec_request) == false) { log("*** " & testcasename() & ": FAIL: Failed to setup InnerEcRequestPoP message ***") f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); stop; } // Generate InnerEcRequestSignedForPoP if (f_generate_inner_ec_request_signed_for_pop(v_private_key, v_inner_ec_request, v_inner_ec_request_signed_for_pop) == false) { log("*** " & testcasename() & ": FAIL: Failed to setup InnerEcRequestPoP message ***") f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); stop; } // Secure InnerEcRequestSignedForPoP message v_inner_ec_request_signed_for_pop_msg := encvalue(m_etsiTs102941Data_inner_ec_request_signed_for_pop(v_inner_ec_request_signed_for_pop)); if (f_build_pki_secured_message(vc_eaPrivateKey, valueof(m_signerIdentifier_self), vc_eaHashedId8, v_publicKeyCompressed, v_compressedMode, bit2oct(v_inner_ec_request_signed_for_pop_msg), v_ieee1609dot2_signed_and_encrypted_data) == false) { log("*** " & testcasename() & ": FAIL: Failed to seucure InnerEcRequestPoP message ***") f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); stop; } log("v_ieee1609dot2_signed_and_encrypted_data = ", v_ieee1609dot2_signed_and_encrypted_data); f_http_build_enrolment_request(v_private_key, v_publicKeyX, v_publicKeyY, v_publicKeyCompressed, v_compressedMode, v_ieee1609dot2_signed_and_encrypted_data); f_init_default_headers_list(v_headers); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); Loading @@ -447,15 +460,27 @@ module ItsPki_TestCases { mw_http_response_ok( mw_http_message_body_binary( mw_binary_body_ieee1609dot2_data( mw_etsiTs103097Data_encrypted( mw_enrolmentResponseMessage( mw_encryptedData( -, mw_SymmetricCiphertext_aes128ccm ))))))) { ))))))) -> value v_response { tc_ac.stop; log("*** " & testcasename() & ": PASS: InnerEcReponse received ***"); if (f_verify_pki_message(vc_eaPrivateEncKey, vc_eaPeerWholeHash, vc_eaCertificate, v_response.response.body.binary_body.ieee1609dot2_data, false, v_etsi_ts_102941_data) == false) { log("*** " & testcasename() & ": FAIL: Failed to verify PKI message ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": LOG: Receive ", v_etsi_ts_102941_data, " ***"); if (not(match(v_etsi_ts_102941_data.content, mw_enrolmentResponse))) { log("*** " & testcasename() & ": FAIL: Unexpected message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: InnerEcResponse received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } } [] httpPort.receive( // FIXME Use altstep mw_http_response( mw_http_response_ko Loading