Commit c410c005 authored by Yann Garcia's avatar Yann Garcia
Browse files

Start reviewing ITS-S EC tests

parent eef4aca7
......@@ -208,6 +208,7 @@ int http_codec::encode_request(const LibItsHttp__TypesAndValues::Request& p_requ
p_encoding_buffer.put_cs("0");
_ec.is_content_length_present = 0x00;
}
loggers::get_instance().log("http_codec::encode_request: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present);
p_encoding_buffer.put_cs("\r\n");
// Add message body
......@@ -255,7 +256,8 @@ int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_r
if (v.size_of() > 0) {
loggers::get_instance().log_msg("http_codec::encode_response: Processing value ", v[0]);
if (std::string(static_cast<const char*>(header.header__name())).compare("Content-Type") == 0) { // Store it for HTTP body payload encoding
int j = 1;
loggers::get_instance().log("http_codec::encode_response: Storing Content-Type");
int j = 0;
while (j < v.size_of()) {
content_type += v[j++];
} // End of 'while' statement
......@@ -265,7 +267,7 @@ int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_r
while (j < v.size_of()) {
p_encoding_buffer.put_cs(", ");
loggers::get_instance().log_msg("http_codec::encode_response: Processing value ", v[j]);
p_encoding_buffer.put_cs(v[j]);
p_encoding_buffer.put_cs(v[j++]);
j += 1;
} // End of 'while' statement
}
......@@ -287,30 +289,35 @@ int http_codec::encode_response (const LibItsHttp__TypesAndValues::Response& p_r
_ec.length = os.lengthof();
_ec.is_content_length_present = 0x01;
}
loggers::get_instance().log("http_codec::encode_request: length=%d", _ec.length);
loggers::get_instance().log("http_codec::encode_response: length=%d", _ec.length);
} else {
loggers::get_instance().log("http_codec::encode_request: HTTP body field not present");
loggers::get_instance().log("http_codec::encode_response: HTTP body field not present");
_ec.length = 0;
_ec.is_content_length_present = 0x00;
}
// Encode Content-Length header
p_encoding_buffer.put_cs("Content-Length: ");
if (_ec.length != 0) {
p_encoding_buffer.put_cs(int2str(_ec.length + 2/*Stand for the last CRLF*/));
loggers::get_instance().log("http_codec::encode_request: Content-Length: %s", static_cast<const char*>(int2str(_ec.length + 2/*Stand for the last CRLF*/)));
p_encoding_buffer.put_cs(static_cast<const char*>(int2str(_ec.length + 2/*Stand for the last CRLF*/)));
_ec.is_content_length_present = 0x01;
} else {
p_encoding_buffer.put_cs("0");
_ec.is_content_length_present = 0x00;
}
loggers::get_instance().log("http_codec::encode_response: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present);
loggers::get_instance().log("http_codec::encode_request: Content-Length: %d - %x", _ec.length, _ec.is_content_length_present);
p_encoding_buffer.put_cs("\r\n");
// Add message body
p_encoding_buffer.put_cs("\r\n");
if (_ec.length != 0) {
if (_ec.is_content_length_present == 0x01) {
loggers::get_instance().log_msg("http_codec::encode_request: Add body ", os);
p_encoding_buffer.put_os(os);
p_encoding_buffer.put_cs("\r\n");
}
loggers::get_instance().log_to_hexa("<<< http_codec::encode_response: ", p_encoding_buffer);
return 0;
}
......
......@@ -156,12 +156,12 @@ int security_services::process_ieee_1609_dot2_signed_data(const IEEE1609dot2::Si
return -1;
}
} else {
const OPTIONAL<INTEGER>& v = dynamic_cast<const OPTIONAL<INTEGER>& >(header_info.generationTime()); // in millisecond
const OPTIONAL<INTEGER>& v = dynamic_cast<const OPTIONAL<INTEGER>& >(header_info.generationTime()); // in microsecond
unsigned long long gt = ((INTEGER&)(*v.get_opt_value())).get_long_long_val();
// Get current time timestamp
unsigned long long us = base_time::get_instance().get_its_current_time_us(); // in millisecond
unsigned long long us = base_time::get_instance().get_its_current_time_us(); // in microsecond
loggers::get_instance().log("security_services::process_ieee_1609_dot2_signed_data: generation time check %ld / %ld, delta = %f", header_info.generationTime(), us, abs((double)gt - (double)us));
if (abs((double)gt - (double)us) >= 5.0) { // TODO Use a params for generation_time_epsilon
if (abs((double)gt - (double)us) >= 500000.0) { // TODO Use a params for generation_time_epsilon, 500ms differences
loggers::get_instance().warning("security_services::process_ieee_1609_dot2_signed_data: Invalid generation time, discard it");
if (p_verify) {
return -1;
......
......@@ -46,6 +46,8 @@ int uppertester_pki_codec::encode (const LibItsPki__TypesAndValues::UtPkiTrigger
encoding_buffer.put_os(u.triggerEnrolmentRequest().privateKey()); // 32 bytes
encoding_buffer.put_os(u.triggerEnrolmentRequest().compressedPublickey()); //33 bytes
*/
} else if (u.ischosen(LibItsPki__TypesAndValues::UtPkiTrigger::ALT_triggerAuthorizationRequest)) {
encoding_buffer.put_c(static_cast<const unsigned char>(uppertester_pki_codec::c_utPkiTriggerAuthorizationRequest));
} else { // Error
data = OCTETSTRING(0, nullptr);
loggers::get_instance().warning("<<< uppertester_pki_codec::encode: Failed to encode UT message");
......@@ -85,76 +87,6 @@ int uppertester_pki_codec::encode_ (const Base_Type& type, const TTCN_Typedescri
loggers::get_instance().log("uppertester_pki_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);
/*if (
(s.rfind(".shape") != string::npos) ||
(s.rfind(".relevanceDistance") != string::npos) ||
(s.rfind(".relevanceTrafficDirection") != string::npos)
) {
encoding_buffer.put_c((unsigned char)static_cast<const Enum_Type&>(type).as_int());
} else if (s.rfind(".payload") != string::npos) {
const OCTETSTRING& os = static_cast<const OCTETSTRING&>(type);
const unsigned char s[] = { (unsigned char)((os.lengthof() & 0x0000FF00) >> 8), (unsigned char)os.lengthof() };
encoding_buffer.put_s(2, s);
if (os.lengthof() != 0) {
encoding_buffer.put_string(os);
}
} else if (s.rfind(".detectionTime") != string::npos) {
unsigned long long llu = static_cast<const INTEGER&>(type).get_long_long_val();
loggers::get_instance().log("uppertester_pki_codec::encode_ : detectionTime=%llu", llu);
std::vector<unsigned char> v;
for (int i = 0; i < 6; i++) {
v.insert(v.begin(), static_cast<unsigned char>(llu));
llu >>= 8;
} // End of 'for' statement
OCTETSTRING os(v.size(), v.data());
loggers::get_instance().log_msg("uppertester_pki_codec::encode_: timeDetection=", os);
encoding_buffer.put_string(os);
} else if (
(s.rfind(".validityDuration") != string::npos) ||
(s.rfind(".repetitionDuration") != string::npos)
) {
if (type.is_present()) {
const OPTIONAL<INTEGER> &o = dynamic_cast<const OPTIONAL<INTEGER> &>(type);
const INTEGER& i = static_cast<const INTEGER&>(*o.get_opt_value());
loggers::get_instance().log_msg("uppertester_pki_codec::encode_: i=", i);
encoding_buffer.put_string(int2oct(i, 3));
}
} else if (
(s.rfind(".informationQuality") != string::npos) ||
(s.rfind(".causeCode") != string::npos) ||
(s.rfind(".subCauseCode") != string::npos)
) {
const INTEGER& i = static_cast<const INTEGER&>(type);
encoding_buffer.put_string(int2oct(i, 1));
} else if (
(s.rfind(".linkedCause") != string::npos) ||
(s.rfind(".eventHistory") != string::npos)
) {
// Skip them
} else if (
(s.rfind(".transmissionInterval") != string::npos) ||
(s.rfind(".repetitionInterval") != string::npos)
) {
if (type.is_present()) {
const OPTIONAL<INTEGER> &o = dynamic_cast<const OPTIONAL<INTEGER> &>(type);
const INTEGER& i = static_cast<const INTEGER&>(*o.get_opt_value());
encoding_buffer.put_string(int2oct(i, 2));
}
} else if (s.rfind(".originatingStationID") != string::npos) {
const INTEGER& i = static_cast<const INTEGER&>(type);
encoding_buffer.put_string(int2oct(i, 4));
} else if (s.rfind(".sequenceNumber") != string::npos) {
const INTEGER& i = static_cast<const INTEGER&>(type);
encoding_buffer.put_string(int2oct(i, 2));
} else if (s.rfind(".AlacarteContainer") != string::npos) {
const OPTIONAL<OCTETSTRING> &o = dynamic_cast<const OPTIONAL<OCTETSTRING> &>(type);
const OCTETSTRING& os = static_cast<const OCTETSTRING&>(*o.get_opt_value());
encoding_buffer.put_string(int2oct(os.lengthof(), 2));
encoding_buffer.put_string(os);
} else {
loggers::get_instance().log("uppertester_pki_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);
}*/
}
loggers::get_instance().log_to_hexa("<<<uppertester_pki_codec::encode_: encoding_buffer=", encoding_buffer);
......
......@@ -35,6 +35,7 @@ public:
const unsigned char c_utPkiInitializeResult = 0x01;
const unsigned char c_utPkiTriggerEnrolmentRequest = 0xBB;
const unsigned char c_utPkiTriggerResult = 0xBC;
const unsigned char c_utPkiTriggerAuthorizationRequest = 0xBD;
private:
int encode_ (const Base_Type& type, const TTCN_Typedescriptor_t& field_descriptor, TTCN_Buffer& encoding_buffer);
......
......@@ -28,9 +28,9 @@ LibItsPki_Pics.PICS_TS_AA_CERTIFICATE_ID := "CERT_GEMALTO_AA"
LibItsPki_Pixits.PX_AUTHORIZATION_REQUEST_WITH_POP := false # Not private key available
LibItsPki_Pics.PICS_SECPKI_REENROLMENT := true
LibItsPki_Pixits.PX_EC_PRIVATE_KEY := '7F14157FF7644A357B7845557AC4CC65A5CFD2570EF2D3A67F8CD5AECC9B9453'O
LibItsPki_Pixits.PX_EC_HASHED_ID8 := '6F39A071EF045942'O
LibItsPki_Pixits.PX_EC_PRIVATE_KEY := '73AD688448117EFF50BCB044AA9CFD7932023B7A2C62887A1D3B99FED2B5237C'O
LibItsPki_Pixits.PX_EC_HASH := 'C4FD3EF2B51CFD605D7D40FA9C1C279B8B8C4D7CB9D40D6044C55F615D750502'O
LibItsPki_Pixits.PX_EC_HASHED_ID8 := '44C55F615D750502'O
[LOGGING]
# In this section you can specify the name of the log file and the classes of events
......
......@@ -23,7 +23,10 @@ LibItsSecurity_Pixits.PX_IUT_SEC_CONFIG_NAME := "asn1c_cert"
LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/x-its-request"
LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.0.252"
LibItsPki_Pics.PICS_HTTP_POST_URI := "/ea/enrolment"
LibItsPki_Pics.PICS_HTTP_POST_URI_EC := "/ea/enrolment"
LibItsPki_Pics.PICS_HTTP_POST_URI_AT := "/ea/authval"
LibItsPki_Pics.PICS_HTTP_POST_URI_ATV := "/aa/authorization"
#LibItsSecurity_Pics.PICS_SEC_FIXED_KEYS := true # Seed
LibItsPki_Pics.PICS_IUT_ITS_S_ROLE := true
......@@ -41,8 +44,8 @@ LibItsPki_Pics.PICS_ITS_S_ENC_BRAINPOOLP384r1_PRIVATE_KEY := '6B4B4392511B252C9
LibItsPki_Pics.PICS_ITS_S_SIGN_BRAINPOOLP384r1_PRIVATE_KEY := '3CD977195A579787C84D5900F4CB6341E0C3D2750B140C5380E6F03CE3FBA0022F7541DEABDCED4790D313ED8F56ACA8'O;
LibItsPki_Pics.PICS_ITS_S_SIGN_BRAINPOOLP384r1_PUBLIC_KEY := '0243FF5C96984C2C3F5FD5C5F6551C90F5FAEE1E5E8301763E4AF1E9D627F3474E554B82EE98EC4B49808DFF61B35F8313'O;
LibItsPki_Pics.PICS_ITS_S_CANONICAL_ID := '1B4CA1210123AE900BBE6C3EBAE7E87DA20DBDAB1E7B2EC0691C51C1021900AA'O;
LibItsPki_Pics.PICS_TS_EA_CERTIFICATE_ID := "CERT_ATOS_EA"
LibItsPki_Pics.PICS_TS_AA_CERTIFICATE_ID := "CERT_ATOS_AA"
LibItsPki_Pics.PICS_TS_EA_CERTIFICATE_ID := "CERT_TS_A_EA"
LibItsPki_Pics.PICS_TS_AA_CERTIFICATE_ID := "CERT_TS_A_AA"
[LOGGING]
# In this section you can specify the name of the log file and the classes of events
......@@ -139,8 +142,15 @@ system.httpPort.params := "HTTP(codecs=http_its:http_etsi_ieee1609dot2_codec)/TC
system.utPort.params := "UT_PKI/UDP(dst_ip=192.168.0.250,src_port=12345)"
[EXECUTE]
# Check that IUT sends an enrolment request when triggered.
ItsPki_TestCases.TC_SECPKI_ITSS_ENR_01_BV
# If the enrolment request of the IUT is an initial enrolment request, the itsId (contained in the InnerECRequest) shall be set to the canonical identifier, the signer (contained in the outer EtsiTs1030971Data-Signed) shall be set to self and the outer signature shall be computed using the canonical private key.
#ItsPki_TestCases.TC_SECPKI_ITSS_ENR_02_BV
# In presence of a valid EC, the enrolment request of the IUT is a rekeying enrolment request with the itsId (contained in the InnerECRequest) and the SignerIdentifier (contained in the outer EtsiTs1030971Data-Signed) both declared as digest containing the HashedId8 of the EC and the outer signature computed using the current valid EC private key corresponding to the verification public key.
#ItsPki_TestCases.TC_SECPKI_ITSS_ENR_03_BV
#ItsPki_TestCases.TC_SECPKI_ITSS_ENR_06_BV
#ItsPki_TestCases.TC_SECPKI_ITSS_ENR_07_BV
[MAIN_CONTROLLER]
......
module ItsPki_Pixits {
modulepar integer PX_RE_ENROLMENT_COUNTER := 2;
modulepar float PX_RE_ENROLMENT_DELAY := 2.0;
} // End of module ItsPki_Pixits
This diff is collapsed.
Subproject commit a904ba2789456073401b34024cd5e03963633fc4
Subproject commit d2d6eae8e179a226e372c6ede69cb9a0863f654e
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment