Commits (15)
This diff is collapsed.
module ItsPkiItss_TestControl {
// LibItsPki
import from LibItsPki_Pics all;
// AtsPki
import from ItsPkiItss_TestCases all;
control {
if (PICS_IUT_ITS_S_ROLE) {
if (PICS_SECPKI_ENROLMENT) {
execute(TC_SECPKI_ITSS_ENR_01_BV());
execute(TC_SECPKI_ITSS_ENR_02_BV());
if (PICS_SECPKI_REENROLMENT) {
execute(TC_SECPKI_ITSS_ENR_03_BV());
execute(TC_SECPKI_ITSS_ENR_06_BV_1());
execute(TC_SECPKI_ITSS_ENR_06_BV_2());
execute(TC_SECPKI_ITSS_ENR_12_BV());
}
if (PICS_SECPKI_CRL) {
execute(TC_SECPKI_ITSS_ENR_04_BV())
}
if (PICS_SECPKI_ENROLLMENT_RETRY) {
execute(TC_SECPKI_ITSS_ENR_REP_01_BV());
execute(TC_SECPKI_ITSS_ENR_REP_02_BV());
execute(TC_SECPKI_ITSS_ENR_REP_03_BV());
execute(TC_SECPKI_ITSS_ENR_REP_04_BV());
execute(TC_SECPKI_ITSS_ENR_REP_05_BV());
}
execute(TC_SECPKI_ITSS_ENR_05_BV());
execute(TC_SECPKI_ITSS_ENR_07_BV());
execute(TC_SECPKI_ITSS_ENR_08_BV_1());
execute(TC_SECPKI_ITSS_ENR_08_BV_2());
execute(TC_SECPKI_ITSS_ENR_09_BV_1());
execute(TC_SECPKI_ITSS_ENR_09_BV_2());
execute(TC_SECPKI_ITSS_ENR_10_BV_1());
execute(TC_SECPKI_ITSS_ENR_10_BV_2());
execute(TC_SECPKI_ITSS_ENR_11_BV());
execute(TC_SECPKI_ITSS_ENR_RECV_01_BV());
execute(TC_SECPKI_ITSS_ENR_RECV_02_BV());
}
if (PICS_SECPKI_AUTHORIZATION) {
execute(TC_SECPKI_ITSS_AUTH_01_BV());
execute(TC_SECPKI_ITSS_AUTH_02_BV());
execute(TC_SECPKI_ITSS_AUTH_03_BV());
execute(TC_SECPKI_ITSS_AUTH_04_BV());
execute(TC_SECPKI_ITSS_AUTH_05_BV());
execute(TC_SECPKI_ITSS_AUTH_06_BV());
execute(TC_SECPKI_ITSS_AUTH_07_BV());
execute(TC_SECPKI_ITSS_AUTH_08_BV());
execute(TC_SECPKI_ITSS_AUTH_09_BV());
execute(TC_SECPKI_ITSS_AUTH_10_BV());
execute(TC_SECPKI_ITSS_AUTH_11_BV());
execute(TC_SECPKI_ITSS_AUTH_12_BV());
execute(TC_SECPKI_ITSS_AUTH_13_BV());
execute(TC_SECPKI_ITSS_AUTH_14_BV());
if (PICS_SECPKI_AUTH_PRIVACY) {
execute(TC_SECPKI_ITSS_AUTH_15_BV());
}
if (not PICS_SECPKI_AUTH_PRIVACY) {
execute(TC_SECPKI_ITSS_AUTH_16_BV());
}
if (PICS_SECPKI_AUTHORIZATION_RETRY) {
execute(TC_SECPKI_ITSS_AUTH_REP_01_BV());
execute(TC_SECPKI_ITSS_AUTH_REP_02_BV());
execute(TC_SECPKI_ITSS_AUTH_REP_03_BV());
execute(TC_SECPKI_ITSS_AUTH_REP_04_BV());
execute(TC_SECPKI_ITSS_AUTH_REP_05_BV());
}
}
}
} // End of 'control' statement
} // End of module module ItsPkiItss_TestControl
......@@ -17,5 +17,7 @@ module ItsPki_Pixits {
modulepar float PX_EC_REPETITION_TIMEOUT := 120.0;
modulepar float PX_EC_REPETITION_TIMEOUT_TH2 := 150.0;
modulepar float PX_AT_REPETITION_TIMEOUT_TH2 := 150.0;
} // End of module ItsPki_Pixits
This diff is collapsed.
......@@ -8,45 +8,6 @@ module ItsPki_TestControl {
control {
if (PICS_IUT_ITS_S_ROLE) {
if (PICS_SECPKI_ENROLMENT) {
execute(TC_SECPKI_ITSS_ENR_01_BV());
execute(TC_SECPKI_ITSS_ENR_02_BV());
if (PICS_SECPKI_REENROLMENT) {
execute(TC_SECPKI_ITSS_ENR_03_BV());
execute(TC_SECPKI_ITSS_ENR_06_BV_1());
execute(TC_SECPKI_ITSS_ENR_06_BV_2());
execute(TC_SECPKI_ITSS_ENR_12_BV());
}
if (PICS_SECPKI_CRL) {
execute(TC_SECPKI_ITSS_ENR_04_BV())
}
if (PICS_SECPKI_ENROLLMENT_RETRY) {
execute(TC_SECPKI_ITSS_ENR_REP_01_BV());
execute(TC_SECPKI_ITSS_ENR_REP_02_BV());
execute(TC_SECPKI_ITSS_ENR_REP_03_BV());
execute(TC_SECPKI_ITSS_ENR_REP_04_BV());
execute(TC_SECPKI_ITSS_ENR_REP_05_BV());
}
execute(TC_SECPKI_ITSS_ENR_05_BV());
execute(TC_SECPKI_ITSS_ENR_07_BV());
execute(TC_SECPKI_ITSS_ENR_08_BV_1());
execute(TC_SECPKI_ITSS_ENR_08_BV_2());
execute(TC_SECPKI_ITSS_ENR_09_BV_1());
execute(TC_SECPKI_ITSS_ENR_09_BV_2());
execute(TC_SECPKI_ITSS_ENR_10_BV_1());
execute(TC_SECPKI_ITSS_ENR_10_BV_2());
execute(TC_SECPKI_ITSS_ENR_11_BV());
execute(TC_SECPKI_ITSS_ENR_RECV_01_BV());
execute(TC_SECPKI_ITSS_ENR_RECV_02_BV());
}
if (PICS_SECPKI_AUTHORIZATION) {
// TODO
}
}
if (PICS_IUT_CA_ROLE) {
execute(TC_SECPKI_CA_CERTGEN_01_BV());
execute(TC_SECPKI_CA_CERTGEN_02_BV_01());
......
......@@ -39,6 +39,16 @@ module LibItsPki_Pics {
* @desc Does the IUT support enrolment repetition?
*/
modulepar boolean PICS_SECPKI_ENROLLMENT_RETRY := true;
/**
* @desc Does the IUT support authorization repetition?
*/
modulepar boolean PICS_SECPKI_AUTHORIZATION_RETRY := true;
/**
* @desc Does the IUT support authorization repetition?
*/
modulepar boolean PICS_SECPKI_AUTH_PRIVACY := true;
/**
* @desc Does the IUT support autorization?
......
......@@ -161,6 +161,15 @@ module LibItsPki_Templates {
}
} // End of template m_etsiTs102941Data_authorization_request
template (present) EtsiTs102941Data mw_etsiTs102941Data_authorization_request(
in template (present) InnerAtRequest p_inner_at_request := ?
) := {
version := PkiProtocolVersion,
content := {
authorizationRequest := p_inner_at_request
}
} // End of template m_etsiTs102941Data_authorization_request
template (value) EtsiTs102941Data m_etsiTs102941Data_authorization_response(
in template (value) InnerAtResponse p_inner_at_response
) := {
......@@ -1380,4 +1389,11 @@ module LibItsPki_Templates {
}
}
template (present) HeaderInfo mw_headerInfo_ecSignature (
template (present) Psid p_psid := c_its_aid_SCR
) modifies mw_ieee1609Dot2_headerInfo := {
expiryTime := omit,
generationLocation := omit
} // End of template mw_ecSignature_headerInfo
} // End of module LibItsPki_Templates
......@@ -167,6 +167,7 @@ module LibItsPki_TypesAndValues {
type record of octetstring PrivateEcKeys;
type record of octetstring PublicCompressedEcKeys;
type set of octetstring OctSet;
type record of integer EcCompressedModes;
type record of HashedId8 EcHashedId8;
type record of EtsiTs103097Certificate EcCertificates;
......
......@@ -87,6 +87,8 @@ module LibItsPki_Functions {
connect(p_pki:syncPort, self:syncPort);
connect(p_pki:infoPort, p_itss:infoPort);
activate(a_default_mtc());
} // End of function f_cfMtcUp01
function f_cfMtcUp02(
......@@ -99,6 +101,7 @@ module LibItsPki_Functions {
connect(self:syncPort, mtc:syncPort);
connect(p_itss:syncPort, self:syncPort);
connect(p_ea:syncPort, self:syncPort);
activate(a_default_mtc());
} // End of function f_cfMtcUp02
function f_cfMtcUp03(
......@@ -111,6 +114,7 @@ module LibItsPki_Functions {
connect(self:syncPort, mtc:syncPort);
connect(p_itss:syncPort, self:syncPort);
connect(p_tlm:syncPort, self:syncPort);
activate(a_default_mtc());
} // End of function f_cfMtcUp03
function f_cfMtcUp04(
......@@ -123,6 +127,7 @@ module LibItsPki_Functions {
connect(self:syncPort, mtc:syncPort);
connect(p_itss:syncPort, self:syncPort);
connect(p_dc:syncPort, self:syncPort);
activate(a_default_mtc());
} // End of function f_cfMtcUp04
/**
......@@ -357,12 +362,16 @@ module LibItsPki_Functions {
}
} // End of function f_cfHttpUp_ea
function f_cfUp_itss() runs on ItsPkiItss system ItsPkiItssSystem {
function f_cfUp_itss(
in charstring p_cert_id := ""
) runs on ItsPkiItss system ItsPkiItssSystem {
map(self:geoNetworkingPort, system:geoNetworkingPort);
map(self:utPort, system:utPort);
//map(self:acPort, system:acPort);
activate(a_default_itss());
//map(self:acPort, system:acPort);
vc_hashedId8ToBeUsed := p_cert_id;
f_initializeState();
// activate(a_default_pki()); TOTO Defualt from geoNet
......@@ -846,6 +855,10 @@ module LibItsPki_Functions {
httpAtVPort.stop;
httpAtVPort.start;
}
case ("inner_at_request"){
httpAtPort.stop;
httpAtPort.start;
}
}
}
} // End of function f_http_restart
......@@ -1619,6 +1632,66 @@ module LibItsPki_Functions {
return true;
} // End of function f_http_build_authorization_request_with_wrong_parameters
function f_http_build_common_authorization_response(
inout InnerAtResponse p_inner_at_response,
in Oct16 p_request_hash,
in octetstring p_private_key := ''O,
in octetstring p_digest := ''O,
in Oct16 p_aes_sym_key,
out Ieee1609Dot2Data p_ieee1609dot2_signed_and_encrypted_data
) return boolean {
var octetstring v_msg;
var Oct12 v_nonce;
var boolean v_result := false;
// Secure the response
log("f_http_build_common_authorization_response: p_inner_at_response= ", p_inner_at_response);
v_msg := bit2oct(encvalue(m_etsiTs102941Data_inner_at_response(p_inner_at_response)));
v_nonce := substr(f_hashWithSha256(int2oct((f_getCurrentTimeUtc() * 1000), 16)), 0, 12); // Random value
// TODO Consider Sha384: m_signerIdentifier_digest(f_hashedId8FromSha384(p_digest))
if (f_build_pki_secured_response_message(p_private_key,
valueof(m_signerIdentifier_digest(f_hashedId8FromSha256(p_digest))),// in SignerIdentifier p_signer_identifier,
v_msg,
p_aes_sym_key,
v_nonce,
p_ieee1609dot2_signed_and_encrypted_data
) == false) {
log("f_http_build_common_authorization_response: Failed to generate the certificate");
p_inner_at_response := valueof(
m_innerAtResponse_ko(
p_request_hash,
its_aa_deniedpermissions
)
);
} else {
v_result := true;
}
log("<<< f_http_build_common_authorization_response: v_result= ", v_result);
log("<<< f_http_build_common_authorization_response: p_inner_at_response= ", p_inner_at_response);
return v_result;
}
function f_http_build_error_authorization_response(
in AuthorizationResponseCode p_responseCode := unknownits,
in Oct16 p_request_hash,
in octetstring p_private_key := ''O,
in octetstring p_digest := ''O,
in Oct16 p_aes_sym_key,
out Ieee1609Dot2Data p_ieee1609dot2_signed_and_encrypted_data
) return boolean {
var InnerAtResponse v_inner_at_response;
v_inner_at_response := valueof(
m_innerAtResponse_ko(
p_request_hash,
p_responseCode
)
);
return f_http_build_common_authorization_response ( v_inner_at_response, p_request_hash,
p_private_key, p_digest, p_aes_sym_key,
p_ieee1609dot2_signed_and_encrypted_data );
}
function f_http_build_authorization_response(
in template (omit) InnerAtRequest p_inner_at_request := omit,
in AuthorizationResponseCode p_responseCode := ok,
......@@ -1630,10 +1703,6 @@ module LibItsPki_Functions {
out Ieee1609Dot2Data p_ieee1609dot2_signed_and_encrypted_data
) return boolean {
// Local variables
var bitstring v_msg_bit;
var octetstring v_msg;
var Oct12 v_nonce;
var Ieee1609Dot2Data v_ieee1609dot2_signed_data;
var EtsiTs103097Certificate v_at_certificate;
var boolean v_result := false;
......@@ -1673,32 +1742,9 @@ module LibItsPki_Functions {
}
}
// Secure the response
log("f_http_build_authorization_response: p_inner_at_response= ", p_inner_at_response);
v_msg := bit2oct(encvalue(m_etsiTs102941Data_inner_at_response(p_inner_at_response)));
v_nonce := substr(f_hashWithSha256(int2oct((f_getCurrentTimeUtc() * 1000), 16)), 0, 12); // Random value
// TODO Consider Sha384: m_signerIdentifier_digest(f_hashedId8FromSha384(p_digest))
if (f_build_pki_secured_response_message(p_private_key,
valueof(m_signerIdentifier_digest(f_hashedId8FromSha256(p_digest))),// in SignerIdentifier p_signer_identifier,
v_msg,
p_aes_sym_key,
v_nonce,
p_ieee1609dot2_signed_and_encrypted_data
) == false) {
log("f_http_build_authorization_response: Failed to generate the certificate");
p_inner_at_response := valueof(
m_innerAtResponse_ko(
p_request_hash,
its_aa_deniedpermissions
)
);
} else {
v_result := true;
}
log("<<< f_http_build_authorization_response: v_result= ", v_result);
log("<<< f_http_build_authorization_response: p_inner_at_response= ", p_inner_at_response);
return v_result;
return f_http_build_common_authorization_response ( p_inner_at_response, p_request_hash,
p_private_key, p_digest, p_aes_sym_key,
p_ieee1609dot2_signed_and_encrypted_data );
} // End of function f_http_build_authorization_response
function f_http_build_authorization_validation_request(
......@@ -2094,14 +2140,14 @@ module LibItsPki_Functions {
// Generate EeRaDownloadRequest
if (f_generate_ee_ra_download_request(p_filename, v_ee_ra_download_request) == false) {
log("*** f_http_build_butterfly_at_download_request_message: ERROR: Failed to generate InnerEcRequest ***");
log("f_http_build_butterfly_at_download_request_message: ERROR: Failed to generate InnerEcRequest");
return false;
}
log ("f_http_build_butterfly_at_download_request_message: v_ee_ra_download_request: ", v_ee_ra_download_request);
// Secure EeRaDownloadRequest
if (f_extract_enc_key(vc_eaCertificate, v_public_enc_key, v_compressed_enc_key_mode) == false) {
log("*** f_http_build_butterfly_at_download_request_message: ERROR: Non canonical EA certificate ***");
log("f_http_build_butterfly_at_download_request_message: ERROR: Non canonical EA certificate");
return false;
}
log("f_http_build_butterfly_at_download_request_message: Public encryption key: ", v_public_enc_key);
......@@ -2113,7 +2159,7 @@ module LibItsPki_Functions {
log("f_http_build_butterfly_at_download_request_message: vc_ec_cert_hashed_id8: ", vc_ec_hashed_id8);
v_result := f_build_pki_secured_request_message_signed_with_pop(vc_ec_private_keys[vc_ec_keys_counter - 1], valueof(m_signerIdentifier_digest(vc_ec_hashed_id8[vc_ec_keys_counter - 1])), vc_eaHashedId8/*recipientId*/, v_public_enc_key, v_compressed_enc_key_mode, p_salt, bit2oct(encvalue(m_etsiTs102941Data_ee_ra_download_request(v_ee_ra_download_request))), PX_EC_ALG_FOR_EC, -, p_ieee1609dot2_signed_and_encrypted_data, p_aes_sym_key, p_encrypted_sym_key, p_authentication_vector, p_nonce, p_request_hash);
if (v_result == false) {
log("*** f_http_build_butterfly_at_download_request_message: ERROR: Failed to generate InnerEcRequestSignedForPop ***");
log("f_http_build_butterfly_at_download_request_message: ERROR: Failed to generate InnerEcRequestSignedForPop");
return false;
} else {
log("f_http_build_butterfly_at_download_request_message: p_ieee1609dot2_signed_and_encrypted_data= ", p_ieee1609dot2_signed_and_encrypted_data);
......@@ -3791,7 +3837,7 @@ module LibItsPki_Functions {
),
m_validityPeriod(
f_getCurrentTime() / 1000,
m_duration_in_hours(PX_GENERATED_CERTIFICATE_DURATION - 1)
m_duration_in_hours(PX_GENERATED_CERTIFICATE_DURATION)
),
m_geographicRegion_identifiedRegion(
{
......@@ -5368,6 +5414,18 @@ module LibItsPki_Functions {
mw_binary_body_ieee1609dot2_data( p_ieee1609dot2_data)
)));
template (present) HttpMessage mw_http_at_request_generic (
template (present) Ieee1609Dot2Data p_ieee1609dot2_data := mw_authorizationRequestMessage(mw_encryptedData())
) :=
mw_http_request(
mw_http_request_post(
PICS_HTTP_POST_URI_AT,
-,
mw_http_message_body_binary(
mw_binary_body_ieee1609dot2_data( p_ieee1609dot2_data)
)));
} // End of predefined requests
function f_await_ec_request_send_response(
......@@ -5399,8 +5457,8 @@ module LibItsPki_Functions {
v_etsi_ts_102941_data,
p_inner_ec_request
)){
var EtsiTs103097Certificate v_ec_certificate;
var HashedId8 v_ec_certificate_hashed_id8;
var EtsiTs103097Certificate v_ec_certificate;
var HashedId8 v_ec_certificate_hashed_id8;
var Ieee1609Dot2Data v_response_message;
log(">>>>>> f_await_ec_request_send_response v_inner_ec_request=", p_inner_ec_request);
......@@ -5428,18 +5486,22 @@ module LibItsPki_Functions {
f_http_build_inner_ec_response(p_inner_ec_request, p_response_code, v_request_hash, vc_eaPrivateKey, vc_eaWholeHash, v_aes_enc_key,
v_ec_certificate, v_ec_certificate_hashed_id8, p_inner_ec_response, v_response_message);
vc_ec_hashed_id8[vc_ec_counter] := v_ec_certificate_hashed_id8;
vc_ec_certificates[vc_ec_counter] := v_ec_certificate;
vc_ec_counter := vc_ec_counter + 1;
v_response := m_http_response(
m_http_response_ok(
m_http_message_body_binary(
m_binary_body_ieee1609dot2_data(v_response_message)
), v_headers));
} else {
v_response := m_http_response(m_http_response_500_internal_error(v_headers));
}
f_http_send(v_headers, v_response);
v_result := true;
}
f_http_send(v_headers, v_response);
v_result := true;
}
[] a_await_ec_http_request_from_iut( mw_http_request(), v_wrong_request) {
log(">>>>>> f_await_ec_request_send_response: Wrong message received ", v_wrong_request);
......@@ -5474,6 +5536,27 @@ module LibItsPki_Functions {
} // End of function f_await_ec_request_send_no_response
function f_await_at_request_send_no_response(
out HttpMessage p_request
) runs on ItsPkiHttp return boolean {
log(">>> f_await_at_request_send_no_response");
var boolean v_result := false;
tc_ac.start;
alt {
[] a_await_at_http_request_from_iut(mw_http_at_request_generic, p_request) {
tc_ac.stop;
log("f_await_at_request_send_no_response: Restart HTTP connection ***");
v_result := true;
f_http_restart("inner_at_request");
}
[] tc_ac.timeout {
log("f_await_at_request_send_no_response: Expected message not received ***");
}
} // End of 'alt' statement
return v_result;
} // End of function f_await_at_request_send_no_response
function f_await_ec_request_send_error_response(
out HttpMessage p_request
) runs on ItsPkiHttp {
......@@ -6567,6 +6650,22 @@ module LibItsPki_Functions {
} // End of group inner_ec_xxx
group altsteps {
altstep a_default_mtc() runs on ServerSyncComp {
[] a_shutdown() {
log("*** a_default_mtc: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
all component . done;
stop;
}
}
altstep a_default_itss() runs on ItsPkiItss {
[] a_shutdown() {
log("*** a_default_itss: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***");
f_cfDown_itss();
stop;
}
}
altstep a_default_pki_http() runs on ItsPkiHttp {
[not(PICS_MULTIPLE_END_POINT)] httpPort.receive(
......
suite := AtsPki
suite := $(AtsBTP)$(SUB_ATS)
pdu := EtsiTs103097Data EtsiTs102941Data
sources := ItsPki_Pixits.ttcn \
ItsPki_TestCases.ttcn \
ItsPki_TestControl.ttcn \
# ../AtsCAM/lib/asn1/CAM_PDU_Descriptions.asn \
# ../AtsDENM/lib/asn1/DENM_PDU_Descriptions.asn \
sources := ItsPki_Pixits.ttcn
ifeq (pki,$(SUB_ATS))
sources += ItsPki_TestCases.ttcn ItsPki_TestControl.ttcn
else
ifeq (itss,$(SUB_ATS))
sources += ItsPkiItss_TestCases.ttcn ItsPkiItss_TestControl.ttcn
else
sources += ItsPki_TestCases.ttcn ItsPki_TestControl.ttcn ItsPkiItss_TestCases.ttcn ItsPkiItss_TestControl.ttcn
endif
endif
modules := lib \
lib_system \
......