Loading ttcn/GeoNetworking/LibItsGeoNetworking_Functions.ttcn +10 −5 Original line number Diff line number Diff line Loading @@ -2561,17 +2561,22 @@ module LibItsGeoNetworking_Functions { var template (value) SecuredMessage v_securedMessage; // Build signed SecuredMessage v_gnNonSecuredPacket := m_geoNwShbPacket( v_gnNonSecuredPacket := valueof(m_geoNwShbPacket( f_getPosition(c_compMTC) ); )); // Add CAM payload v_gnNonSecuredPacket.payload := f_adaptPayload_m(p_payload); v_gnNonSecuredPacket.payload := valueof(f_adaptPayload_m(p_payload)); f_buildGnSecuredCam( v_securedMessage, bit2oct(encvalue(v_gnNonSecuredPacket)), e_certificate, { m_header_field_unrecognised_certificate(f_HashedId3FromHashedId8(p_digest)) } { m_header_field_unrecognised_certificate( f_HashedId3FromHashedId8( p_digest )) } ); // Build secured Gn packet Loading ttcn/Security/LibItsSecurity_Functions.ttcn3 +34 −30 Original line number Diff line number Diff line Loading @@ -207,15 +207,15 @@ module LibItsSecurity_Functions { var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage; var integer i, j, k, n; var HeaderFields v_mandatoryHeaders := {}; var template (value) HeaderFields v_headerFields := {}; var template (value) HeaderField v_signerInfo; var HeaderFields v_headerFields := {}; var HeaderField v_signerInfo; // Sanity check if (ispresent(p_certificateName) and (p_certificateName != "TA_CONFIG_A")) { if (f_readCertificate(p_certificateName & ".AA_CERT", v_aaCertificate) == false) { if (ispresent(p_certificateName) and (valueof(p_certificateName) != "TA_CONFIG_A")) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { return false; } if (f_readCertificate(p_certificateName & ".AT_CERT", v_atCertificate) == false) { if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) { return false; } } else { Loading @@ -228,29 +228,29 @@ module LibItsSecurity_Functions { } else { // Prepare mandatory headers if (p_signerInfoType == e_certificate) { // Add the AT certificate v_signerInfo := m_header_field_signer_info(m_signerInfo_certificate(v_atCertificate)); if (valueof(p_signerInfoType) == e_certificate) { // Add the AT certificate v_signerInfo := valueof(m_header_field_signer_info(m_signerInfo_certificate(v_atCertificate))); } if (p_signerInfoType == e_certificate_chain) { // Add the AT certificate + AA Certificate v_signerInfo := m_header_field_signer_info( if (valueof(p_signerInfoType) == e_certificate_chain) { // Add the AT certificate + AA Certificate v_signerInfo := valueof(m_header_field_signer_info( m_signerInfo_certificates( { v_aaCertificate, v_atCertificate } ) ); )); } if (p_signerInfoType == e_certificate_digest_with_ecdsap256) { // Add the AT certificate digest v_signerInfo := m_header_field_signer_info(m_signerInfo_digest(v_atCertificate.signer_infos[0].signerInfo.digest)); if (valueof(p_signerInfoType) == e_certificate_digest_with_ecdsap256) { // Add the AT certificate digest v_signerInfo := valueof(m_header_field_signer_info(m_signerInfo_digest(v_atCertificate.signer_infos[0].signerInfo.digest))); } v_mandatoryHeaders := { v_signerInfo, m_header_field_generation_time(f_getCurrentTime()), m_header_field_message_type(c_messageType_CAM) valueof(m_header_field_generation_time(f_getCurrentTime())), valueof(m_header_field_message_type(c_messageType_CAM)) } if(not(ispresent(p_headerFields))) { if(not(ispresent(valueof(p_headerFields)))) { v_toBeSignedSecuredMessage.header_fields := v_mandatoryHeaders; } else { Loading @@ -261,8 +261,8 @@ module LibItsSecurity_Functions { k := 0; // index for v_headerFields // Special processing for signer_info if(lengthof(p_headerFields) > 0 and p_headerFields[i].type_ == e_signer_info) { v_headerFields[k] := p_headerFields[i]; if(lengthof(valueof(p_headerFields)) > 0 and valueof(p_headerFields[i]).type_ == e_signer_info) { v_headerFields[k] := valueof(p_headerFields[i]); k := k + 1; i := i + 1; } Loading @@ -270,7 +270,7 @@ module LibItsSecurity_Functions { for(j:=j; j < lengthof(v_mandatoryHeaders); j:=j+1) { // Search for mandatory header in p_HeaderFields for(n:=0; n < lengthof(p_headerFields); n:=n+1) { if(p_headerFields[n].type_ == v_mandatoryHeaders[j].type_) { if(valueof(p_headerFields[n]).type_ == v_mandatoryHeaders[j].type_) { // mandatory header already in p_HeaderFields break; } Loading @@ -278,8 +278,8 @@ module LibItsSecurity_Functions { if(n >= lengthof(p_headerFields)) { if(v_mandatoryHeaders[j].type_ != e_signer_info) { // Add headers from p_headerFields having lower number than mandatory header for(n:=i ; n < lengthof(p_headerFields) and p_headerFields[n].type_ < v_mandatoryHeaders[j].type_; n:=n+1) { v_headerFields[k] := p_headerFields[n]; for(n:=i ; n < lengthof(p_headerFields) and valueof(p_headerFields[n]).type_ < v_mandatoryHeaders[j].type_; n:=n+1) { v_headerFields[k] := valueof(p_headerFields[n]); k := k + 1; i := i + 1; } Loading @@ -294,7 +294,7 @@ module LibItsSecurity_Functions { // Add remaining headers from p_HeaderFields for(i:=i; i < lengthof(p_headerFields); i:=i+1) { // Add headers from p_headerFields having lower number than mandatory header v_headerFields[k] := p_headerFields[i]; v_headerFields[k] := valueof(p_headerFields[i]); k := k + 1; } } Loading Loading @@ -840,7 +840,11 @@ module LibItsSecurity_Functions { var octetstring v_certificate; if (fx_readCertificate(p_certificateId, v_certificate) == true) { var integer v_result := decvalue(oct2bit(v_certificate), p_certificate); var bitstring v_oct2bit; var integer v_result; v_oct2bit := oct2bit(v_certificate); v_result := decvalue(v_oct2bit, p_certificate); if (v_result == 0) { return true; } Loading Loading
ttcn/GeoNetworking/LibItsGeoNetworking_Functions.ttcn +10 −5 Original line number Diff line number Diff line Loading @@ -2561,17 +2561,22 @@ module LibItsGeoNetworking_Functions { var template (value) SecuredMessage v_securedMessage; // Build signed SecuredMessage v_gnNonSecuredPacket := m_geoNwShbPacket( v_gnNonSecuredPacket := valueof(m_geoNwShbPacket( f_getPosition(c_compMTC) ); )); // Add CAM payload v_gnNonSecuredPacket.payload := f_adaptPayload_m(p_payload); v_gnNonSecuredPacket.payload := valueof(f_adaptPayload_m(p_payload)); f_buildGnSecuredCam( v_securedMessage, bit2oct(encvalue(v_gnNonSecuredPacket)), e_certificate, { m_header_field_unrecognised_certificate(f_HashedId3FromHashedId8(p_digest)) } { m_header_field_unrecognised_certificate( f_HashedId3FromHashedId8( p_digest )) } ); // Build secured Gn packet Loading
ttcn/Security/LibItsSecurity_Functions.ttcn3 +34 −30 Original line number Diff line number Diff line Loading @@ -207,15 +207,15 @@ module LibItsSecurity_Functions { var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage; var integer i, j, k, n; var HeaderFields v_mandatoryHeaders := {}; var template (value) HeaderFields v_headerFields := {}; var template (value) HeaderField v_signerInfo; var HeaderFields v_headerFields := {}; var HeaderField v_signerInfo; // Sanity check if (ispresent(p_certificateName) and (p_certificateName != "TA_CONFIG_A")) { if (f_readCertificate(p_certificateName & ".AA_CERT", v_aaCertificate) == false) { if (ispresent(p_certificateName) and (valueof(p_certificateName) != "TA_CONFIG_A")) { if (f_readCertificate(valueof(p_certificateName) & ".AA_CERT", v_aaCertificate) == false) { return false; } if (f_readCertificate(p_certificateName & ".AT_CERT", v_atCertificate) == false) { if (f_readCertificate(valueof(p_certificateName) & ".AT_CERT", v_atCertificate) == false) { return false; } } else { Loading @@ -228,29 +228,29 @@ module LibItsSecurity_Functions { } else { // Prepare mandatory headers if (p_signerInfoType == e_certificate) { // Add the AT certificate v_signerInfo := m_header_field_signer_info(m_signerInfo_certificate(v_atCertificate)); if (valueof(p_signerInfoType) == e_certificate) { // Add the AT certificate v_signerInfo := valueof(m_header_field_signer_info(m_signerInfo_certificate(v_atCertificate))); } if (p_signerInfoType == e_certificate_chain) { // Add the AT certificate + AA Certificate v_signerInfo := m_header_field_signer_info( if (valueof(p_signerInfoType) == e_certificate_chain) { // Add the AT certificate + AA Certificate v_signerInfo := valueof(m_header_field_signer_info( m_signerInfo_certificates( { v_aaCertificate, v_atCertificate } ) ); )); } if (p_signerInfoType == e_certificate_digest_with_ecdsap256) { // Add the AT certificate digest v_signerInfo := m_header_field_signer_info(m_signerInfo_digest(v_atCertificate.signer_infos[0].signerInfo.digest)); if (valueof(p_signerInfoType) == e_certificate_digest_with_ecdsap256) { // Add the AT certificate digest v_signerInfo := valueof(m_header_field_signer_info(m_signerInfo_digest(v_atCertificate.signer_infos[0].signerInfo.digest))); } v_mandatoryHeaders := { v_signerInfo, m_header_field_generation_time(f_getCurrentTime()), m_header_field_message_type(c_messageType_CAM) valueof(m_header_field_generation_time(f_getCurrentTime())), valueof(m_header_field_message_type(c_messageType_CAM)) } if(not(ispresent(p_headerFields))) { if(not(ispresent(valueof(p_headerFields)))) { v_toBeSignedSecuredMessage.header_fields := v_mandatoryHeaders; } else { Loading @@ -261,8 +261,8 @@ module LibItsSecurity_Functions { k := 0; // index for v_headerFields // Special processing for signer_info if(lengthof(p_headerFields) > 0 and p_headerFields[i].type_ == e_signer_info) { v_headerFields[k] := p_headerFields[i]; if(lengthof(valueof(p_headerFields)) > 0 and valueof(p_headerFields[i]).type_ == e_signer_info) { v_headerFields[k] := valueof(p_headerFields[i]); k := k + 1; i := i + 1; } Loading @@ -270,7 +270,7 @@ module LibItsSecurity_Functions { for(j:=j; j < lengthof(v_mandatoryHeaders); j:=j+1) { // Search for mandatory header in p_HeaderFields for(n:=0; n < lengthof(p_headerFields); n:=n+1) { if(p_headerFields[n].type_ == v_mandatoryHeaders[j].type_) { if(valueof(p_headerFields[n]).type_ == v_mandatoryHeaders[j].type_) { // mandatory header already in p_HeaderFields break; } Loading @@ -278,8 +278,8 @@ module LibItsSecurity_Functions { if(n >= lengthof(p_headerFields)) { if(v_mandatoryHeaders[j].type_ != e_signer_info) { // Add headers from p_headerFields having lower number than mandatory header for(n:=i ; n < lengthof(p_headerFields) and p_headerFields[n].type_ < v_mandatoryHeaders[j].type_; n:=n+1) { v_headerFields[k] := p_headerFields[n]; for(n:=i ; n < lengthof(p_headerFields) and valueof(p_headerFields[n]).type_ < v_mandatoryHeaders[j].type_; n:=n+1) { v_headerFields[k] := valueof(p_headerFields[n]); k := k + 1; i := i + 1; } Loading @@ -294,7 +294,7 @@ module LibItsSecurity_Functions { // Add remaining headers from p_HeaderFields for(i:=i; i < lengthof(p_headerFields); i:=i+1) { // Add headers from p_headerFields having lower number than mandatory header v_headerFields[k] := p_headerFields[i]; v_headerFields[k] := valueof(p_headerFields[i]); k := k + 1; } } Loading Loading @@ -840,7 +840,11 @@ module LibItsSecurity_Functions { var octetstring v_certificate; if (fx_readCertificate(p_certificateId, v_certificate) == true) { var integer v_result := decvalue(oct2bit(v_certificate), p_certificate); var bitstring v_oct2bit; var integer v_result; v_oct2bit := oct2bit(v_certificate); v_result := decvalue(v_oct2bit, p_certificate); if (v_result == 0) { return true; } Loading