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