Commit b76a4180 authored by filatov's avatar filatov
Browse files

LibItsCam:

  + f_generateDefaultCam
GeoNW and Sec: 
  + f_askForCertificateChain
  + f_sendCertificateRequest
  - f_askForCertificate
parent 86130013
......@@ -245,4 +245,21 @@ module LibItsCam_Functions {
} // end group camPositionFunctions
group camGenerators {
function f_generateDefaultCam()
return octetstring {
return bit2oct(
encvalue(
m_camReq(
m_camMsg_vehicle(
f_getTsStationId(),
f_getCurrentTime(), // FIXIT: must be deltatime
m_tsPosition
)
)
)
);
}
} // end of group camGenerators
} // end LibItsCam_Functions
\ No newline at end of file
......@@ -2379,11 +2379,12 @@ module LibItsGeoNetworking_Functions {
}
return v_ret;
}
/**
* @desc Ask for the certificate chain and wait for GN message with security containing certificate chain as a signer info
* @return the certificate chain used for sign received message
*/
function f_askAndWaitForCertificateChain (out CertificateChain p_chain)
function f_askForCertificateChain (in template(value) octetstring p_CamPayload)
runs on ItsGeoNetworking
return boolean {
var SecuredMessage v_recv;
......@@ -2394,7 +2395,34 @@ module LibItsGeoNetworking_Functions {
if(f_getMsgSignerInfo(v_recv, v_si)) {
if(f_getCertificateSignerInfo(v_si.signerInfo.certificate, v_si)) {
if(match (v_si.type_, e_certificate_digest_with_ecdsap256)) {
f_askForCertificate(v_si.signerInfo.digest);
f_sendCertificateRequest(v_si.signerInfo.digest, p_CamPayload);
if(tc_ac.running){
tc_ac.stop;tc_ac.start;
}
v_ret := true;
}
}
}
}
}
return v_ret;
}
/**
* @desc Ask for the certificate chain and wait for GN message with security containing certificate chain as a signer info
* @return the certificate chain used for sign received message
*/
function f_askAndWaitForCertificateChain (out CertificateChain p_chain, in template(value) octetstring p_CamPayload)
runs on ItsGeoNetworking
return boolean {
var SecuredMessage v_recv;
var SignerInfo v_si;
var boolean v_ret := false;
alt {
[] a_securedMessageWithCertificate(v_recv) {
if(f_getMsgSignerInfo(v_recv, v_si)) {
if(f_getCertificateSignerInfo(v_si.signerInfo.certificate, v_si)) {
if(match (v_si.type_, e_certificate_digest_with_ecdsap256)) {
f_sendCertificateRequest(v_si.signerInfo.digest, p_CamPayload);
if(tc_ac.running){
tc_ac.stop;tc_ac.start;
}
......@@ -2413,6 +2441,7 @@ module LibItsGeoNetworking_Functions {
return v_ret;
}
/**
* @desc Wait for GN message with security containing digest as a signer info
* @return the digest of the certificate been used to sign received message
......@@ -2438,23 +2467,43 @@ module LibItsGeoNetworking_Functions {
group CertRequests{
function f_askForCertificate (in template (value) HashedId8 p_digest) {
// FIXME Move to GeoNet
// Send CAM message with insert the request_unrecognized_certificate
// header containing specified digest
/* TODO: Waiting Alex to understand how to send message
var SecuredMessage v_msg;
function f_sendCertificateRequest (
in template (value) HashedId8 p_digest,
in template (value) octetstring p_payload
)
runs on ItsGeoNetworking
{
var GeoNetworkingReq v_gnReq;
var GnNonSecuredPacket v_gnNonSecuredPacket;
var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
var template (value) SecuredMessage v_securedMessage;
if ( f_buildGnSecuredCam (v_msg,
in octetstring p_unsecuredPayload,
in ThreeDLocation p_threeDLocation,
in template (omit) HeaderFields p_headerFileds := omit
)) {
}
*/
} // End of function f_askForCertificate
// Build signed SecuredMessage
v_gnNonSecuredPacket := m_geoNwShbPacket(
f_getPosition(c_compMTC)
);
// Add CAM payload
v_gnNonSecuredPacket.payload := f_adaptPayload_m(p_payload);
f_buildGnSecuredCam(
v_securedMessage,
bit2oct(encvalue(v_gnNonSecuredPacket)),
true,
{ m_header_field_digest(f_HashedId3FromHashedId8(p_digest)) }
);
// Build secured Gn packet
v_gnReq := m_geoNwReq_linkLayerBroadcast(
m_geoNwSecPdu(
v_gnNonSecuredPacket,
v_securedMessage
) // End of template m_geoNwSecPdu
); // End of template m_geoNwReq_linkLayerBroadcast
// Send Message
f_sendGeoNetMessage(v_gnReq);
} // End of function f_sendCertificateRequest
} // End of group CertRequests
......
......@@ -164,7 +164,6 @@ module LibItsSecurity_Functions {
function f_buildGnSecuredCam(
out template (value) SecuredMessage p_securedMessage,
in octetstring p_unsecuredPayload,
in ThreeDLocation p_threeDLocation,
in template (omit) boolean p_addCertificate := false,
in template (omit) HeaderFields p_headerFields := omit
) return boolean {
......@@ -175,7 +174,7 @@ module LibItsSecurity_Functions {
var template (value) ToBeSignedSecuredMessage v_toBeSignedSecuredMessage;
// Create SecuredMessage payload to be signed
if (valueof(p_addCertificate) == true) { // Add the AA certificate
if (valueof(p_addCertificate) == true) { // Add the AT certificate
v_toBeSignedSecuredMessage := m_toBeSignedSecuredMessage(
c_security_profileCAMs,
{ // Field HeaderFields
......@@ -185,9 +184,6 @@ module LibItsSecurity_Functions {
) // End of template m_signerInfo_certificate
), // End of template m_header_field_signer_info
m_header_field_generation_time(f_getCurrentTime()),
m_header_field_generation_location(
p_threeDLocation
),
m_header_field_message_type(c_messageType_CAM)
}, // End of field HeaderFields
{
......@@ -197,7 +193,7 @@ module LibItsSecurity_Functions {
}, // End of field HeaderFields
e_signature
);
} else { // Add the AA certificate digest
} else { // Add the AT certificate digest
v_toBeSignedSecuredMessage := m_toBeSignedSecuredMessage(
c_security_profileCAMs,
{ // Field HeaderFields
......@@ -207,9 +203,6 @@ module LibItsSecurity_Functions {
) // End of template m_signerInfo_digest
), // End of template m_header_field_digest
m_header_field_generation_time(f_getCurrentTime()),
m_header_field_generation_location(
p_threeDLocation
),
m_header_field_message_type(c_messageType_CAM)
}, // End of field HeaderFields
{
......
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