Commits (2)
[submodule "lib/asn1"]
path = lib/asn1
url = https://forge.etsi.org/rep/ITS/asn1/sec_ts103097.git
branch = testing
/**
* @author ETSI / STF481 / STF507 / STF517 / STF525
* @version $Url$
* $Id$
* @desc Module containing functions for the secured GN ATS
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module ItsSecurity_Functions {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_Time all;
// LibIts
import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
import from ITS_Container language "ASN.1:1997" all;
import from DENM_PDU_Descriptions language "ASN.1:1997" all;
// LibItsCommon
import from LibItsCommon_TestSystem all;
import from LibItsCommon_Functions all;
import from LibItsCommon_ASN1_NamedNumbers all;
// LibItsDenm
import from LibItsDenm_Templates all;
import from LibItsDenm_Functions all;
import from LibItsDenm_TestSystem all;
// LibItsCam
import from LibItsCam_Templates all;
import from LibItsCam_Functions all;
import from LibItsCam_TestSystem all;
// LibItsBtp
import from LibItsBtp_Templates all;
// LibItsGeoNetworking
import from LibItsGeoNetworking_TestSystem all;
import from LibItsGeoNetworking_Functions all;
import from LibItsGeoNetworking_Templates all;
import from LibItsGeoNetworking_TypesAndValues all;
import from LibItsGeoNetworking_Pixits all;
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
import from LibItsSecurity_Templates all;
import from LibItsSecurity_Functions all;
group secCam {
/**
* @desc Prepare a secured CAM
* @param p_configId The configuration identifier to be used
* @param p_headerFields HeaderInfo to be inserted in the message
* @param p_signerIdentifier Add digest or AT certificate or certificate chain
* @param p_addMissingHeaders Whether to add mandatory headers not present in p_headerFields
* @return Secured GeoNetworking packet containing a CAM
*/
function f_prepareSecuredCam(
in charstring p_configId,
in HeaderInfo p_headerInfo,
in SignerIdentifier p_signerIdentifier,
in template (value) StationID p_station_id := f_getTsStationId()
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GnNonSecuredPacket v_gnNonSecuredPacket;
var octetstring v_gnPayload;
var EtsiTs103097Data v_securedMessage;
// log(">>> f_prepareSecuredCam");
// Build signed Ieee1609Dot2Data
v_gnNonSecuredPacket := valueof(m_geoNwShbPacket(
f_getPosition(c_compNodeC)
));
// Encode CAM payload
v_gnPayload := valueof(
bit2oct(
encvalue(
m_camReq(
m_camMsg_vehicle_HF_BV(
valueof(p_station_id),
f_getCurrentTime() mod 65536, // See ETSI EN 302 637-2 V1.3.0 - Clause B.3 generationDelatTime
LibItsCam_Templates.m_tsPosition
)))));
// Add BTP/CAM payload
if (PX_GN_UPPER_LAYER == e_btpA) {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpA(
v_gnPayload))));
} else {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpB(
v_gnPayload))));
}
// Encode it
// log("f_prepareSecuredCam: v_gnNonSecuredPacket= ", v_gnNonSecuredPacket);
v_gnPayload := bit2oct(
encvalue(
v_gnNonSecuredPacket
)
);
// log("f_prepareSecuredCam: v_gnPayload= ", v_gnPayload);
f_buildGnSecuredCam(
v_securedMessage,
valueof(m_toBeSignedData(
m_signedDataPayload(
m_etsiTs103097Data_unsecured(
v_gnPayload
)),
p_headerInfo
)),
p_signerIdentifier,
p_configId
);
// Return secured Gn packet
return valueof(m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
} // End of function f_prepareSecuredCam
/**
* @desc Prepare a secured CAM including wrong elements of protocols. It is used for BO test cases
* @param p_configId The configuration identifier to be used
* @param p_protocolVersion The protocol version to be set. Default: 2
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @param p_addMissingHeaders Whether to add mandatory headers not present in p_headerFields
* @param p_alterATCertificateSignature Set to true to alter the AT certificate signature
* @param p_alterAACertificateSignature Set to true to alter the AA certificate signature
* @return Secured GeoNetworking packet containing a CAM
*/
function f_prepareSecuredCam_Bo(
in charstring p_configId,
in HeaderInfo p_headerInfo,
in SignerIdentifier p_signerIdentifier,
in template (value) StationID p_station_id := f_getTsStationId(),
in UInt8 p_protocolVersion := c_protocol_version,
in boolean p_alter_psid := false,
in boolean p_add_generation_location := false,
in boolean p_add_expiry_time := false,
in boolean p_add_p2pcd_learning_request := false,
in boolean p_add_missing_crl_identifier := false,
in boolean p_add_encryption_key := false,
in boolean p_alter_signature_algorithm := false,
in boolean p_alter_signer_identifier := false,
in boolean p_alter_signature := false
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GnNonSecuredPacket v_gnNonSecuredPacket;
var octetstring v_gnPayload;
var Ieee1609Dot2Data v_securedMessage;
// Build signed Ieee1609Dot2Data
v_gnNonSecuredPacket := valueof(m_geoNwShbPacket(
f_getPosition(c_compNodeC)
));
// Add CAM payload
v_gnPayload := valueof(
valueof(
bit2oct(
encvalue(
m_camReq(
m_camMsg_vehicle_HF_BV(
f_getTsStationId(),
f_getCurrentTime() mod 65536, // See ETSI EN 302 637-2 V1.3.0 - Clause B.3 generationDelatTime
LibItsCam_Templates.m_tsPosition
))))));
// Add BTP/CAM payload
if (PX_GN_UPPER_LAYER == e_btpA) {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpA(
v_gnPayload))));
} else {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpB(
v_gnPayload))));
}
// Encode it
v_gnPayload := bit2oct(
encvalue(
v_gnNonSecuredPacket
)
);
f_buildGnSecuredCam_Bo(
v_securedMessage,
valueof(m_toBeSignedData(
m_signedDataPayload(
m_etsiTs103097Data_unsecured(
v_gnPayload
)),
p_headerInfo
)),
p_signerIdentifier,
p_configId,
p_protocolVersion,
p_alter_psid,
p_add_generation_location,
p_add_expiry_time,
p_add_p2pcd_learning_request,
p_add_missing_crl_identifier,
p_add_encryption_key,
p_alter_signature_algorithm,
p_alter_signer_identifier,
p_alter_signature
);
// Return secured Gn packet
// log("f_prepareSecuredCam_Bo: ", m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
return valueof(m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
} // End of function f_prepareSecuredCam_Bo
/**
* @desc Sends a secured CAM
* @param p_configId The configuration identifier to be used
* @param p_headerFields Additional HeaderInfo
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @return GeoNetworking payload
*/
function f_sendSecuredCam(
in charstring p_configId,
in HeaderInfo p_headerInfo,
in SignerIdentifier p_issuerIdentifier,
in template (value) StationID p_station_id := f_getTsStationId()
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GeoNetworkingPdu v_securedGnPdu := f_prepareSecuredCam(p_configId, p_headerInfo, p_issuerIdentifier, p_station_id);
log("f_sendSecuredCam: v_securedGnPdu= ", v_securedGnPdu);
f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_securedGnPdu)));
return v_securedGnPdu;
} // End of function f_sendSecuredCam
/**
* @desc Sends a secured CAM including wrong elements of protocols. It is used for BO test cases
* @param p_configId The configuration identifier to be used
* @param p_protocolVersion The protocol version to be set. Default: 2
* @param p_trailerStatus The Traile behaviour:
* <li>0 for no trailer</li>
* <li>1 for invalid trailer</li>
* <li>2 for duplicated trailer</li>
* @param p_headerFields Additional HeaderInfo
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @return GeoNetworking payload
*/
function f_sendSecuredCam_Bo(
in charstring p_configId,
in UInt8 p_protocolVersion := c_protocol_version,
in boolean p_alter_psid := false,
in boolean p_add_generation_location := false,
in boolean p_add_expiry_time := false,
in boolean p_add_p2pcd_learning_request := false,
in boolean p_add_missing_crl_identifier := false,
in boolean p_add_encryption_key := false,
in boolean p_alter_signature_algorithm := false,
in boolean p_alter_signer_identifier := false,
in boolean p_alter_signature := false
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GeoNetworkingPdu v_securedGnPdu := f_prepareSecuredCam_Bo(
p_configId,
valueof(m_headerInfo_cam(-, (f_getCurrentTime() * 1000)/*us*/)),
valueof(m_signerIdentifier_digest),
f_getTsStationId(),
p_protocolVersion,
p_alter_psid,
p_add_generation_location,
p_add_expiry_time,
p_add_p2pcd_learning_request,
p_add_encryption_key,
p_alter_signature_algorithm,
p_alter_signer_identifier,
p_alter_signature
);
log("f_sendSecuredCam_Bo: v_securedGnPdu= ", v_securedGnPdu);
f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_securedGnPdu)));
return v_securedGnPdu;
} // End of function f_sendSecuredCam_Bo
} // End of group secCam
group secDenm {
/**
* @desc Prepare a secured DENM
* @param p_configId The configuration identifier to be used
* @param p_headerFields HeaderInfo to be inserted in the message
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @param p_addMissingHeaders Whether to add mandatory headers not present in p_headerFields
* @return Secured GeoNetworking packet containing a CAM
*/
function f_prepareSecuredDenm(
in charstring p_configId,
in HeaderInfo p_headerInfo,
in SignerIdentifier p_signerIdentifier,
in template (value) StationID p_station_id := f_getTsStationId()
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GnNonSecuredPacket v_gnNonSecuredPacket;
var octetstring v_gnPayload;
var Ieee1609Dot2Data v_securedMessage;
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Use NodeB
var template (value) SituationContainer v_situation := m_situation(LibItsCommon_ASN1_NamedNumbers.CauseCodeType_vehicleBreakdown_, LibItsCommon_ASN1_NamedNumbers.VehicleBreakdownSubCauseCode_unavailable_);
// Build signed Ieee1609Dot2Data
v_gnNonSecuredPacket := valueof(
m_geoNwBroadcastPacket(
v_longPosVectorNodeB,
vc_localSeqNumber,
f_getGeoBroadcastArea(
c_area1 // Select area1 (see ETSI TS 102 871-2 Clause 4.2 Configuration 1)
)));
// Add the DENM payload
v_gnPayload := valueof(
bit2oct(
encvalue(
m_denmReq(
m_denmPdu(
m_denm(
m_denmMgmtCon(
m_tsActionId
),
v_situation,
m_denmLocation_zeroDelta
))))));
// Add BTP/CAM payload
if (PX_GN_UPPER_LAYER == e_btpA) {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpA(
v_gnPayload))));
} else {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpB(
v_gnPayload))));
}
// Encode it
// log("f_prepareSecuredDenm: v_gnPayload= ", v_gnPayload);
v_gnPayload := bit2oct(
encvalue(
v_gnNonSecuredPacket
)
);
f_buildGnSecuredDenm(
v_securedMessage,
valueof(m_toBeSignedData(
m_signedDataPayload(
m_etsiTs103097Data_unsecured(
v_gnPayload
)),
p_headerInfo
)),
p_signerIdentifier,
p_configId
);
// Return secured Gn packet
return valueof(m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
} // End of function f_prepareSecuredDenm
/**
* @desc Prepare a secured DENM including wrong elements of protocols. It is used for BO test cases
* @param p_configId The configuration identifier to be used
* @param p_protocolVersion The protocol version to be set. Default: 2
* @param p_trailerStatus The Traile behaviour:
* <li>0 for no trailer</li>
* <li>1 for invalid trailer</li>
* <li>2 for duplicated trailer</li>
* @param p_headerFields HeaderInfo to be inserted in the message
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @param p_addMissingHeaders Whether to add mandatory headers not present in p_headerFields
* @return Secured GeoNetworking packet containing a CAM
*/
function f_prepareSecuredDenm_Bo(
in charstring p_configId,
in HeaderInfo p_headerInfo,
in SignerIdentifier p_signerIdentifier,
in template (value) StationID p_station_id := f_getTsStationId(),
in UInt8 p_protocolVersion := c_protocol_version,
in boolean p_alter_psid := false,
in boolean p_add_generation_location := false,
in boolean p_add_expiry_time := false,
in boolean p_add_p2pcd_learning_request := false,
in boolean p_add_missing_crl_identifier := false,
in boolean p_add_encryption_key := false,
in boolean p_alter_signature_algorithm := false,
in boolean p_alter_signer_identifier := false,
in boolean p_alter_signature := false
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GnNonSecuredPacket v_gnNonSecuredPacket;
var octetstring v_gnPayload;
var Ieee1609Dot2Data v_securedMessage;
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Use NodeB
var template (value) SituationContainer v_situation := m_situation(LibItsCommon_ASN1_NamedNumbers.CauseCodeType_vehicleBreakdown_, LibItsCommon_ASN1_NamedNumbers.VehicleBreakdownSubCauseCode_unavailable_);
// Build signed Ieee1609Dot2Data
v_gnNonSecuredPacket := valueof(
m_geoNwBroadcastPacket(
v_longPosVectorNodeB,
vc_localSeqNumber,
f_getGeoBroadcastArea(
c_area1 // Select area1 (see ETSI TS 102 871-2 Clause 4.2 Configuration 1)
)));
// Add the DENM payload
v_gnPayload := valueof(
bit2oct(
encvalue(
m_denmReq(
m_denmPdu(
m_denm(
m_denmMgmtCon(
m_tsActionId
),
v_situation,
m_denmLocation_zeroDelta
))))));
// Add BTP/DENM payload
if (PX_GN_UPPER_LAYER == e_btpA) {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpA(
v_gnPayload))));
} else {
v_gnNonSecuredPacket.payload := valueof(
bit2oct(
encvalue(
m_btpB(
v_gnPayload))));
}
// Encode it
v_gnPayload := bit2oct(
encvalue(
v_gnNonSecuredPacket
)
);
f_buildGnSecuredDenm_Bo(
v_securedMessage,
valueof(m_toBeSignedData(
m_signedDataPayload(
m_etsiTs103097Data_unsecured(
v_gnPayload
)),
p_headerInfo
)),
p_signerIdentifier,
p_configId,
p_protocolVersion,
p_alter_psid,
p_add_generation_location,
p_add_expiry_time,
p_add_p2pcd_learning_request,
p_add_missing_crl_identifier,
p_add_encryption_key,
p_alter_signature_algorithm,
p_alter_signer_identifier,
p_alter_signature
);
// Return secured Gn packet
// log("f_prepareSecuredDenm_Bo: ", m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
return valueof(m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
} // End of function f_prepareSecuredDenm_Bo
/**
* @desc Sends a secured DENM
* @param p_configId The configuration identifier to be used
* @param p_headerFields Additional HeaderInfo
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @return GeoNetworking payload
*/
function f_sendSecuredDenm(
in charstring p_configId,
in HeaderInfo p_headerInfo,
in SignerIdentifier p_issuerIdentifier,
in template (value) StationID p_station_id := f_getTsStationId()
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GeoNetworkingPdu v_securedGnPdu := f_prepareSecuredDenm(p_configId, p_headerInfo, p_issuerIdentifier);
log("f_sendSecuredDenm: v_securedGnPdu= ", v_securedGnPdu);
f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_securedGnPdu)));
return v_securedGnPdu;
} // End of function f_sendSecuredDenm
/**
* @desc Sends a secured DENM including wrong elements of protocols. It is used for BO test cases
* @param p_configId The configuration identifier to be used
* @param p_protocolVersion The protocol version to be set. Default: 2
* @param p_trailerStatus The Traile behaviour:
* <li>0 for no trailer</li>
* <li>1 for invalid trailer</li>
* <li>2 for duplicated trailer</li>
* @param p_headerFields Additional HeaderInfo
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @return GeoNetworking payload
*/
function f_sendSecuredDenm_Bo(
in charstring p_configId,
in UInt8 p_protocolVersion := c_protocol_version,
in boolean p_alter_psid := false,
in boolean p_remove_generation_location := false,
in boolean p_add_expiry_time := false,
in boolean p_add_p2pcd_learning_request := false,
in boolean p_add_missing_crl_identifier := false,
in boolean p_add_encryption_key := false,
in boolean p_alter_signature_algorithm := false,
in boolean p_alter_signer_identifier := false,
in boolean p_alter_signature := false
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Use NodeB
var GeoNetworkingPdu v_securedGnPdu := f_prepareSecuredDenm_Bo(
p_configId,
valueof(
m_headerInfo_denm(
-,
(f_getCurrentTime() * 1000)/*us*/,
m_threeDLocation(
v_longPosVectorNodeB.latitude,
v_longPosVectorNodeB.longitude,
0
))),
valueof(m_signerIdentifier_digest),
f_getTsStationId(),
p_protocolVersion,
p_alter_psid,
p_remove_generation_location,
p_add_expiry_time,
p_add_p2pcd_learning_request,
p_add_missing_crl_identifier,
p_add_encryption_key,
p_alter_signature_algorithm,
p_alter_signer_identifier,
p_alter_signature
);
log("f_sendSecuredDenm_Bo: v_securedGnPdu= ", v_securedGnPdu);
f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_securedGnPdu)));
return v_securedGnPdu;
} // End of function f_sendSecuredDenm_Bo
} // End of group secDenm
group secBeacon {
/**
* @desc Prepare a secured Beacon
* @param p_configId The configuration identifier to be used
* @param p_headerFields HeaderInfo to be inserted in the message
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @param p_addMissingHeaders Whether to add mandatory headers not present in p_headerFields
* @return Secured GeoNetworking packet containing a CAM
*/
function f_prepareSecuredBeacon(
in charstring p_configId,
in template (omit) HeaderInfo p_headerFields := omit,
in SignerIdentifier p_issuerIdentifier,// := e_certificate,
in boolean p_addMissingHeaders := true
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GnNonSecuredPacket v_gnNonSecuredPacket;
var octetstring v_gnPayload;
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Use NodeB
var template (value) Ieee1609Dot2Data v_securedMessage;
// Build signed Ieee1609Dot2Data
v_gnNonSecuredPacket := valueof(
m_geoNwBroadcastPacket(
v_longPosVectorNodeB,
vc_localSeqNumber,
f_getGeoBroadcastArea(
c_area1 // Select area1 (see ETSI TS 102 871-2 Clause 4.2 Configuration 1)
)));
// Encode it
v_gnPayload := bit2oct(
encvalue(
v_gnNonSecuredPacket
)
);
/*f_buildGnSecuredOtherMessage(
v_securedMessage,
m_payload_signed(v_gnPayload),
p_issuerIdentifier,
valueof(m_threeDLocation(
v_longPosVectorNodeB.latitude,
v_longPosVectorNodeB.longitude,
0
)),
p_headerFields,
p_configId,
p_addMissingHeaders
);*/
// Return secured Gn packet
return valueof(m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
} // End of function f_prepareSecuredBeacon
/**
* @desc Prepare a secured Beacon including wrong elements of protocols. It is used for BO test cases
* @param p_configId The configuration identifier to be used
* @param p_protocolVersion The protocol version to be set. Default: 2
* @param p_trailerStatus The Traile behaviour:
* <li>0 for no trailer</li>
* <li>1 for invalid trailer</li>
* <li>2 for duplicated trailer</li>
* @param p_headerFields HeaderInfo to be inserted in the message
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @param p_addMissingHeaders Whether to add mandatory headers not present in p_headerFields
* @return Secured GeoNetworking packet containing a CAM
*/
function f_prepareSecuredBeacon_Bo(
in charstring p_configId,
in UInt8 p_protocolVersion := c_protocol_version,
in integer p_trailerStatus := 0,
in template (omit) HeaderInfo p_headerFields := omit,
in SignerIdentifier p_issuerIdentifier,// := e_certificate,
in boolean p_addMissingHeaders := true
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GnNonSecuredPacket v_gnNonSecuredPacket;
var octetstring v_gnPayload;
var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Use NodeB
var template (value) Ieee1609Dot2Data v_securedMessage;
// Build signed Ieee1609Dot2Data
v_gnNonSecuredPacket := valueof(
m_geoNwBroadcastPacket(
v_longPosVectorNodeB,
vc_localSeqNumber,
f_getGeoBroadcastArea(
c_area1 // Select area1 (see ETSI TS 102 871-2 Clause 4.2 Configuration 1)
)));
// Encode it
v_gnPayload := bit2oct(
encvalue(
v_gnNonSecuredPacket
)
);
/*f_buildGnSecuredOtherMessage_Bo(
v_securedMessage,
p_protocolVersion,
p_trailerStatus,
m_payload_signed(v_gnPayload),
p_issuerIdentifier,
valueof(m_threeDLocation(
v_longPosVectorNodeB.latitude,
v_longPosVectorNodeB.longitude,
0
)),
p_headerFields,
p_configId,
p_addMissingHeaders
);*/
// Return secured Gn packet
return valueof(m_geoNwSecPdu(v_gnNonSecuredPacket, v_securedMessage));
} // End of function f_prepareSecuredBeacon_Bo
/**
* @desc Sends a secured Beacon
* @param p_configId The configuration identifier to be used
* @param p_headerFields Additional HeaderInfo
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @return GeoNetworking payload
*/
function f_sendSecuredBeacon(
in charstring p_configId,
in template (omit) HeaderInfo p_headerFields := omit,
in SignerIdentifier p_issuerIdentifier// := e_certificate_digest_with_sha256
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GeoNetworkingPdu v_securedGnPdu := f_prepareSecuredBeacon(p_configId, p_headerFields, p_issuerIdentifier);
f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_securedGnPdu)));
return v_securedGnPdu;
} // End of function f_sendSecuredBeacon
/**
* @desc Sends a secured Beacon including wrong elements of protocols. It is used for BO test cases
* @param p_configId The configuration identifier to be used
* @param p_protocolVersion The protocol version to be set. Default: 2
* @param p_trailerStatus The Traile behaviour:
* <li>0 for no trailer</li>
* <li>1 for invalid trailer</li>
* <li>2 for duplicated trailer</li>
* @param p_headerFields Additional HeaderInfo
* @param p_issuerIdentifier Add digest or AT certificate or certificate chain
* @return GeoNetworking payload
*/
function f_sendSecuredBeacon_Bo(
in charstring p_configId,
in UInt8 p_protocolVersion := c_protocol_version,
in integer p_trailerStatus := 1,
in template (omit) HeaderInfo p_headerFields := omit,
in SignerIdentifier p_issuerIdentifier// := e_certificate_digest_with_sha256
) runs on ItsGeoNetworking return GeoNetworkingPdu {
// Local variables
var GeoNetworkingPdu v_securedGnPdu := f_prepareSecuredBeacon_Bo(p_configId, p_protocolVersion, p_trailerStatus, p_headerFields, p_issuerIdentifier);
f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_securedGnPdu)));
return v_securedGnPdu;
} // End of function f_sendSecuredBeacon_Bo
} // End of group secBeacon
group camTrigger {
/**
* @desc Triggers a CAM change speed events to get a CAM frequency greather than 1 Hz (i.e. more than one CAM per seconds)
* @return Reference to the component used to send the trigger
* @remark This function spawns an ItsCam component in alive mode
* @see fb_changeCamFrequencyGreatherThan1Hz()
*/
function f_setCamFrequencyGreatherThan1Hz() runs on ItsBaseComponent return ItsCam {
var ItsCam v_camComponent;
v_camComponent := ItsCam.create("CAM Trigger") alive;
v_camComponent.start(fb_setCamFrequencyGreatherThan1Hz());
return v_camComponent;
} // End of function f_setCamFrequencyGreatherThan1Hz
/**
* @desc Terminate CAM component execution
* @param Reference to the component used to send the trigger
*/
function f_terminateCam(inout ItsCam p_camComponent) runs on ItsBaseComponent {
p_camComponent.done;
p_camComponent.kill;
} // End of function f_terminateCam
/**
* @desc Behaviour function for triggering a CAM change speed event on IUT
*/
function fb_setCamFrequencyGreatherThan1Hz() runs on ItsCam /* TITAN TODO: system ItsSecSystem */{
// Local variables
var SpeedValue v_speedValues[5] := { 1000, 2000, 3000, 4000, 5000 } //cm/s
var integer v_cntSpeed;
var float v_timer := 0.2; // 1 / 5;
log(">>> fb_setCamFrequencyGreatherThan1Hz");
map(self:utPort, system:camUtPort);
vc_default := activate(LibItsCam_Functions.a_utDefault());
for (v_cntSpeed := 0; v_cntSpeed < lengthof(v_speedValues); v_cntSpeed:=v_cntSpeed + 1) {
LibItsCam_Functions.f_utTriggerEvent(valueof(m_changeSpeed(v_speedValues[v_cntSpeed])));
f_sleep(v_timer);
} // End of 'for' statement
unmap(self:utPort, system:camUtPort);
} // End of function fb_setCamFrequencyGreatherThan1Hz
} // End of group camTrigger
group denmTrigger {
/**
* @desc Triggers a DENM event on IUT
* @remark This function spawns an ItsDenm component in alive mode
* @see fb_secTriggerDenmEvent()
* @return Reference to the component used to send the trigger
*/
function f_triggerDenmEvent() runs on ItsBaseGeoNetworking return ItsDenm {
var ItsDenm v_denmComponent;
//deactivate gnPort default alts
vc_gnDefaultActive := false;
v_denmComponent := ItsDenm.create("DENM Trigger") alive;
v_denmComponent.start(fb_secTriggerDenmEvent());
v_denmComponent.done;
//activate gnPort default alts
vc_gnDefaultActive := true;
return v_denmComponent;
} // End of function f_triggerDenmEvent
/**
* @desc Cancels all previously triggered DENM events on IUT
* @param p_denmComponent Reference of the component previously used to trigger DENM events
* @see fb_secCancelDenmEvent()
*/
function f_cancelDenmEvent(ItsDenm p_denmComponent) runs on ItsBaseGeoNetworking {
var ItsDenm v_denmComponent;
//deactivate gnPort default alts
vc_gnDefaultActive := false;
p_denmComponent.start(fb_secCancelDenmEvent());
p_denmComponent.done;
p_denmComponent.kill;
//activate gnPort default alts
vc_gnDefaultActive := true;
} // End of function f_cancelDenmEvent
/**
* @desc Behaviour function for triggering a DENM event on IUT
*/
function fb_secTriggerDenmEvent() runs on ItsDenm /* TITAN TODO: system ItsSecSystem */ {
// Local variables
var template (value) SituationContainer v_situation := m_situation(LibItsCommon_ASN1_NamedNumbers.CauseCodeType_vehicleBreakdown_, LibItsCommon_ASN1_NamedNumbers.VehicleBreakdownSubCauseCode_unavailable_);
log(">>> fb_secTriggerDenmEvent: ", v_situation);
map(self:utPort, system:denmUtPort);
vc_default := activate(LibItsDenm_Functions.a_utDefault());
log("fb_secTriggerDenmEvent: Call LibItsDenm_Functions.f_utTriggerEvent with ", m_utTriggerEvent(v_situation, defaultValidity));
vc_utActionIDs[0] := LibItsDenm_Functions.f_utTriggerEvent(m_utTriggerEvent(v_situation, defaultValidity));
log("fb_secTriggerDenmEvent: actionId=", vc_utActionIDs[0]);
} // End of function f_secTriggerDenmEvent
/**
* @desc Behaviour function for cancelling previously triggered DENM events on IUT
*/
function fb_secCancelDenmEvent() runs on ItsDenm /* TITAN TODO: system ItsSecSystem */ {
// Local variables
var integer v_counter;
for (v_counter := 0; v_counter < lengthof(vc_utActionIDs); v_counter := v_counter + 1) {
LibItsDenm_Functions.f_utTerminateEvent(m_utEventCancellation(vc_utActionIDs[v_counter]));
} // End of 'for' statement
unmap(self:utPort, system:denmUtPort);
deactivate(vc_default);
} // End of function f_secTriggerDenmEvent
} // End of group denmTrigger
} // End of module ItsSecurity_Functions
/**
* @author ETSI / STF481 / STF507 / STF517 / STF538 / STF545
* @version $Url: https://oldforge.etsi.org/svn/ITS/tags/20170222_STF527_Final/ttcn/AtsSecurity/ItsSecurity_Templates.ttcn $
* $Id: ItsSecurity_Templates.ttcn 2655 2017-01-26 10:46:08Z filatov $
* @desc Module containing templates for secured GeoNetworking ATS
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module ItsSecurity_Templates {
// // LibIts
// import from DENM_PDU_Descriptions language "ASN.1:1997" all;
// import from ITS_Container language "ASN.1:1997" all;
//
// LibItsBtp
/* import from LibItsBtp_TypesAndValues all; */
/* import from LibItsBtp_Templates all; */
/* import from LibItsBtp_Pixits all; */
// LibItsGeoNet
import from LibItsGeoNetworking_TypesAndValues all;
// import from LibItsGeoNetworking_Templates all;
// template (present) BtpPayload mw_btpCamPayload := {
// decodedPayload := {
// camPacket := ?
// },
// rawPayload := ?
// } // End of template mw_btpCamPayload
//
//
// template (present) BtpPayload mw_btpDenmPayload := {
// decodedPayload := {
// denmPacket := ?
// },
// rawPayload := ?
// } // End of template mw_btpDenmPayload
//
// template (present) Payload mw_secCamPayload := {
// decodedPayload := {
// btpPacket := mw_btpB(
// PX_DESTINATION_PORT,
// ?,
// mw_btpCamPayload
// )
// },
// rawPayload := ?
//
// } // End of template mw_secCamPayload
//
// template (present) Payload mw_secDenmPayload := {
// decodedPayload := {
// btpPacket := mw_btpB(
// PX_DESTINATION_PORT,
// ?,
// mw_btpDenmPayload
// )
// },
// rawPayload := ?
//
// } // End of template mw_secCamPayload
} // End of module ItsSecurity_Templates
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* @author ETSI / STF481 / STF507 / STF517
* @version $Url$
* $Id$
* @desc Test Control file for Security Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module ItsSecurity_TestControl {
// LibItsGeoNetworking
import from LibItsGeoNetworking_Pics all;
// ItsSecurity
import from ItsSecurity_TestCases all;
import from LibItsSecurity_Pics all;
// Test Execution
control {
/**
* @desc Sending behaviour test cases
* @see ETSI TS 103 096-2 V1.2.2 (2016-01) Clause 5.2 Sending behaviour
*/
if (PICS_GN_SECURITY) {
execute(TC_SEC_ITSS_SND_MSG_01_BV());
/**
* @desc Sending behaviour test cases for CAM profile
* @see ETSI TS 103 096-2 V1.2.2 (2016-01) Clause 5.2.4 CAM profile
*/
execute(TC_SEC_ITSS_SND_CAM_01_BV());
execute(TC_SEC_ITSS_SND_CAM_02_BV());
execute(TC_SEC_ITSS_SND_CAM_03_BV());
execute(TC_SEC_ITSS_SND_CAM_04_BV());
execute(TC_SEC_ITSS_SND_CAM_05_BV());
execute(TC_SEC_ITSS_SND_CAM_06_BV());
execute(TC_SEC_ITSS_SND_CAM_07_BV());
execute(TC_SEC_ITSS_SND_CAM_08_BV());
execute(TC_SEC_ITSS_SND_CAM_09_BV());
execute(TC_SEC_ITSS_SND_CAM_10_BV());
execute(TC_SEC_ITSS_SND_CAM_11_01_BV());
execute(TC_SEC_ITSS_SND_CAM_11_02_BV());
execute(TC_SEC_ITSS_SND_CAM_12_BV());
execute(TC_SEC_ITSS_SND_CAM_13_BV());
execute(TC_SEC_ITSS_SND_CAM_14_BV());
execute(TC_SEC_ITSS_SND_CAM_15_BV());
execute(TC_SEC_ITSS_SND_CAM_16_BV());
execute(TC_SEC_ITSS_SND_CAM_17_BV());
execute(TC_SEC_ITSS_SND_CAM_18_BV());
execute(TC_SEC_ITSS_SND_CAM_19_BV());
execute(TC_SEC_ITSS_SND_CAM_20_BV());
execute(TC_SEC_ITSS_SND_CAM_21_BV());
execute(TC_SEC_ITSS_SND_CAM_22_BV());
execute(TC_SEC_ITSS_SND_CAM_23_BV());
execute(TC_SEC_ITSS_SND_CAM_24_BV());
execute(TC_SEC_ITSS_SND_CAM_25_BV());
execute(TC_SEC_ITSS_SND_CAM_26_BV());
execute(TC_SEC_ITSS_SND_CAM_27_BV());
/**
* @desc Sending behaviour test cases for DENM profile
* @see ETSI TS 103 096-2 V1.2.2 (2016-01) Clause 5.2.5 DENM profile
*/
execute(TC_SEC_ITSS_SND_DENM_01_BV());
execute(TC_SEC_ITSS_SND_DENM_02_BV());
execute(TC_SEC_ITSS_SND_DENM_03_BV());
execute(TC_SEC_ITSS_SND_DENM_04_BV());
execute(TC_SEC_ITSS_SND_DENM_05_BV());
execute(TC_SEC_ITSS_SND_DENM_06_BV());
execute(TC_SEC_ITSS_SND_DENM_07_BV());
//execute(TC_SEC_ITSS_SND_DENM_08_BV()); Removed
execute(TC_SEC_ITSS_SND_DENM_09_BV());
execute(TC_SEC_ITSS_SND_DENM_10_BV());
execute(TC_SEC_ITSS_SND_DENM_11_BV());
execute(TC_SEC_ITSS_SND_DENM_12_BV());
execute(TC_SEC_ITSS_SND_DENM_13_BV());
execute(TC_SEC_ITSS_SND_DENM_14_BV());
execute(TC_SEC_ITSS_SND_DENM_15_BV());
execute(TC_SEC_ITSS_SND_DENM_16_BV());
execute(TC_SEC_ITSS_SND_DENM_17_BV());
execute(TC_SEC_ITSS_SND_DENM_18_BV());
/**
* @desc Sending behaviour test cases for DENM profile
* @see ETSI TS 103 096-2 V1.2.2 (2016-01) Clause 5.2.6 Generic signed message profile
*/
execute(TC_SEC_ITSS_SND_GENMSG_01_BV());
execute(TC_SEC_ITSS_SND_GENMSG_02_BV());
execute(TC_SEC_ITSS_SND_GENMSG_03_BV());
execute(TC_SEC_ITSS_SND_GENMSG_04_BV());
execute(TC_SEC_ITSS_SND_GENMSG_05_BV());
execute(TC_SEC_ITSS_SND_GENMSG_06_BV());
execute(TC_SEC_ITSS_SND_GENMSG_07_BV());
execute(TC_SEC_ITSS_SND_GENMSG_08_BV());
}
} // End of 'control' statement
} // End of module ItsSecurity_TestControl
/**
* @author ETSI / STF481 / STF507 / STF517 / STF538 / STF545
* @version $Url: https://oldforge.etsi.org/svn/ITS/tags/20170222_STF527_Final/ttcn/AtsSecurity/ItsSecurity_TestSystem.ttcn $
* $Id: ItsSecurity_TestSystem.ttcn 2655 2017-01-26 10:46:08Z filatov $
* @desc Module containing t fest system description for the secured GN ATS
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module ItsSecurity_TestSystem {
import from LibItsCam_TestSystem all;
import from LibItsDenm_TestSystem all;
import from LibItsGeoNetworking_TestSystem all;
/**
* @desc Secured GN test system description
* @member acPort Test Adapter control port
* @member geoNetworkingPort GeoNetworking port
* @member utPort GeoNetworking UT port
* @member denmUtPort DENM UT port
* @member cammUtPort CAM UT port
*/
type component ItsSecSystem {
port LibItsGeoNetworking_TestSystem.AdapterControlPort acPort;
// NT2 ports
port LibItsGeoNetworking_TestSystem.UpperTesterPort utPort;
port GeoNetworkingPort geoNetworkingPort;
// FA ports
port LibItsDenm_TestSystem.UpperTesterPort denmUtPort;
port LibItsCam_TestSystem.UpperTesterPort camUtPort;
} // End of ItsSecSystem
} // End of module ItsSecurity_TestSystem
Copyright 2021 ETSI
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
module LibItsSecurity_EncdecDeclarations {
// LibIts
//import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
//import from EtsiTs103097Module language "ASN.1:1997" all;
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
/**
* @desc Encoding function for EtsiTs103097Certificate certificate
* @param p The certificate to encode
* @return The encode message in OER format
*/
external function fx_enc_CertificateBase(in Ieee1609Dot2.CertificateBase p) return bitstring
with {extension "prototype(convert) encode(PER)"}
external function fx_dec_CertificateBase(inout bitstring b, out Ieee1609Dot2.CertificateBase p) return integer
with {extension "prototype(sliding) decode(PER)"}
/**
* @desc Encoding function for Ieee1609Dot2.ToBeSignedCertificate
* @param p The ToBeSign part of the certificate
* @return The encode message in OER format
*/
external function fx_enc_ToBeSignedCertificate(in Ieee1609Dot2.ToBeSignedCertificate p) return bitstring
with {extension "prototype(convert) encode(PER)"}
/**
* @desc Encoding function for Ieee1609Dot2.Ieee1609Dot2Data
* @param p The Ieee1609Dot2Data part of the certificate
* @return The encode message in OER format
*/
external function fx_enc_Ieee1609Dot2Data(in Ieee1609Dot2.Ieee1609Dot2Data p) return bitstring
with {extension "prototype(convert) encode(PER)"}
external function fx_dec_Ieee1609Dot2Data(inout bitstring p_data, out Ieee1609Dot2.Ieee1609Dot2Data p_ieee1609Dot2Data) return integer
with {extension "prototype(sliding) decode(PER)"}
external function fx_enc_Ieee1609Dot2ToBeSignedData(in Ieee1609Dot2.ToBeSignedData p) return bitstring
with {extension "prototype(convert) encode(PER)"}
external function fx_dec_Ieee1609Dot2ToBeSignedData(inout bitstring p_data, out Ieee1609Dot2.ToBeSignedData p_toBeSignedData) return integer
with {extension "prototype(sliding) decode(PER)"}
external function fx_enc_SspCAM (LibItsSecurity_TypesAndValues.SspCAM p_ssp) return bitstring
with {extension "prototype(convert) encode(LibItsSecurity)"}
external function fx_dec_SspCAM (inout bitstring p_data, out LibItsSecurity_TypesAndValues.SspCAM p_ssp) return integer
with {extension "prototype(sliding) decode(LibItsSecurity)"}
external function fx_enc_SspDENM (LibItsSecurity_TypesAndValues.SspDENM p_ssp) return bitstring
with {extension "prototype(convert) encode(LibItsSecurity)"}
external function fx_dec_SspDENM (inout bitstring p_data, out LibItsSecurity_TypesAndValues.SspDENM p_ssp) return integer
with {extension "prototype(sliding) decode(LibItsSecurity)"}
} // End of module LibItsSecurity_EncdecDeclarations
/**
* @author ETSI / STF481 / STF507 / STF517
* @version $Url: https://oldforge.etsi.org/svn/LibIts/tags/20170222_STF527_Final/ttcn/Security/LibItsSecurity_Pics.ttcn3 $
* $Id: LibItsSecurity_Pics.ttcn3 1318 2017-01-26 10:20:53Z filatov $
* @desc Module containing Pics for Security Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module LibItsSecurity_Pics {
// LibIts
import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
/**
* Does the IUT support SHA-256 digest
*/
modulepar boolean PICS_SEC_SHA256 := true;
/**
* Does the IUT support SHA-384 digest
*/
modulepar boolean PICS_SEC_SHA384 := false;
/**
* Does the IUT support NIST P256 algorithm
*/
modulepar boolean PICS_SEC_NIST_P256 := true;
/**
* Does the IUT support Brainpool P256r1 algorithm
*/
modulepar boolean PICS_SEC_BRAINPOOL_P256R1 := false;
/**
* Does the IUT support Brainpool P384r1 algorithm
*/
modulepar boolean PICS_SEC_BRAINPOOL_P384R1 := false;
/**
* Is the IUT able to distribute AT certificates
*/
modulepar boolean PICS_SEC_P2P_AT_DISTRIBUTION := true;
/**
* Is the IUT able to distribute AA certificates
*/
modulepar boolean PICS_SEC_P2P_AA_DISTRIBUTION := true;
/**
* Is the IUT support certificates pushing
*/
modulepar boolean PICS_SEC_CERTIFICATE_SELECTION := true;
/**
* Is the IUT support circular region geographical restriction
*/
modulepar boolean PICS_SEC_CIRCULAR_REGION := true;
/**
* Does the IUT support rectangular region geographical restriction
*/
modulepar boolean PICS_SEC_RECTANGULAR_REGION := true;
/**
* Does the IUT support polygonal region geographical restriction
*/
modulepar boolean PICS_SEC_POLYGONAL_REGION := true;
/**
* Is the IUT support identified region geographical restriction
*/
modulepar boolean PICS_SEC_IDENTIFIED_REGION := true;
/**
* Does the IUT support identified region/UN geographical restriction
*/
//TODO Remove modulepar boolean PICS_SEC_UN_STATS_REGION_DICTIONARY := true;
/**
* Does the IUT support identified region/ISO31661 geographical restriction
*/
//TODO Remove modulepar boolean PICS_ISO31661_REGION_DICTIONARY := true;
/**
* Does the IUT support ITS-AID for Generic profile?
*/
modulepar boolean PICS_SEC_ITS_AID_OTHER := true;
} // End of module LibItsSecurity_Pics
/**
* @author ETSI / STF481 / STF507 / STF517 / STF538
* @version $Url: https://oldforge.etsi.org/svn/LibIts/tags/20170222_STF527_Final/ttcn/Security/LibItsSecurity_Pixits.ttcn3 $
* $Id: LibItsSecurity_Pixits.ttcn3 1318 2017-01-26 10:20:53Z filatov $
* @desc Module containing Pixits for Security Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module LibItsSecurity_Pixits {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibIts
import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
/**
* @desc Root path to access certificate stored in files, identified by certficate ID
*/
modulepar charstring PX_CERTIFICATE_POOL_PATH := "data/v3/certificates";
/**
* @desc Configuration sub-directory to access certificate stored in files
*/
modulepar charstring PX_IUT_SEC_CONFIG_NAME := "";
/**
* @desc The certficate the IUT should use. Default: CERT_IUT_A_AT
* @remark If the IUT cannot use the test certificates, set this PIXIT to CERT_NONE
*/
modulepar charstring PX_IUT_DEFAULT_CERTIFICATE := "CERT_IUT_A_AT";
/**
* @desc The certficate the IUT should use. Default: CERT_TS_B_AT
* @remark Possible values: CERT_TS_C_AT, CERT_TS_D_AT, or CERT_TS_E_AT
*/
modulepar charstring PX_AT_CERTIFICATE := "CERT_TS_B_AT";
/**
* @desc ITS-AID value for other profile. Default: 38
*/
modulepar Psid PX_OTHER_ITS_AID := 141; // Assign to GN-MGMT, Other than CA, DEN, MAP, SPAT, IVI, SRE, SSE & GN-MGMT: 38
/**
* @desc Invalid protocol version. Default: 3
*/
modulepar UInt8 PX_WRONG_PROTOCOL_VERSION := 4;
/**
* @desc Invalid WGS longitude
*/
modulepar SecLongitude PX_WGSLONGITUDE := 0;
/**
* @desc Invalid WGS latitude. Default: 1
*/
modulepar SecLatitude PX_WGSLATITUDE := 0;
} // End of module LibItsSecurity_Pixits
/**
* @author ETSI / STF481 / STF507 / STF517 / STF538 / STF545
* @version $Url$
* $Id$
* @desc Module containing templates for Security Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module LibItsSecurity_Templates {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibItsCommon
import from LibItsCommon_TypesAndValues all;
// LibItsGeoNetworking
import from LibItsGeoNetworking_TypesAndValues all;
// LibIts
import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
import from LibItsSecurity_Pixits all;
/**
* @desc Constants declaration
*/
group constants {
/**
* @desc Protocol version
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.1 Ieee1609Dot2Data
*/
const UInt8 c_protocol_version := 3;
/**
* @desc Certificate version
* @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1 Certificate
*/
const UInt8 c_certificate_version := 3;
/**
* @desc Its AID for Other
* @see Draft ETSI TS 103 097 V1.3.1 Clause 7.3 Security profile for DENMs
*/
template Psid c_its_aid_Other := PX_OTHER_ITS_AID;
/**
* @desc Minimal value of Longitude
*/
const SecLongitude c_minLongitude := -1799999999; // TODO Use constant from Ieee1609Dot2BaseTypes
/**
* @desc Maximal value of Longitude
*/
const SecLongitude c_maxLongitude := 1800000000; // TODO Use constant from Ieee1609Dot2BaseTypes
/**
* @desc Minimal value of Latitude
*/
const SecLatitude c_minLatitude := -900000000; // TODO Use constant from Ieee1609Dot2BaseTypes
/**
* @desc Maximal value of Latitude
*/
const SecLatitude c_maxLatitude := 900000000; // TODO Use constant from Ieee1609Dot2BaseTypes
/**
* @desc List of ISO-3166 country codes
*/
const SequenceOfUint16 c_iso3166Codes := {
4, 8, 10, 12, 16, 20, 24, 28, 31, 32, 36, 40, 44, 48, 50, 51, 52, 56,
60, 64, 68, 70, 72, 74, 76, 84, 86, 90, 92, 96, 100, 104, 108, 112, 116, 120,
124, 132, 136, 140, 144, 148, 152, 156, 158, 162, 166, 170, 174, 175, 178, 180, 184, 188,
191, 192, 196, 203, 204, 208, 212, 214, 218, 222, 226, 231, 232, 233, 234, 238, 239, 242,
246, 248, 250, 254, 258, 260, 262, 266, 268, 270, 275, 276, 288, 292, 296, 300, 304, 308,
312, 316, 320, 324, 328, 332, 334, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376,
380, 384, 388, 392, 398, 400, 404, 408, 410, 414, 417, 418, 422, 426, 428, 430, 434, 438,
440, 442, 446, 450, 454, 458, 462, 466, 470, 474, 478, 480, 484, 492, 496, 498, 499, 500,
504, 508, 512, 516, 520, 524, 528, 531, 533, 534, 535, 540, 548, 554, 558, 562, 566, 570,
574, 578, 580, 581, 583, 584, 585, 586, 591, 598, 600, 604, 608, 612, 616, 620, 624, 626,
630, 634, 638, 642, 643, 646, 652, 654, 659, 660, 662, 663, 666, 670, 674, 678, 682, 686,
688, 690, 694, 702, 703, 704, 705, 706, 710, 716, 724, 728, 729, 732, 740, 744, 748, 752,
756, 760, 762, 764, 768, 772, 776, 780, 784, 788, 792, 795, 796, 798, 800, 804, 807, 810,
818, 826, 831, 832, 833, 834, 840, 850, 854, 858, 860, 862, 876, 882, 887, 894
};
/**
* @desc List of United Nations Statistics Division country codes
*/
const SequenceOfUint16 c_unStatsAdditionalCodes := {
1, 2, 5, 9, 11, 13, 14, 15, 17, 18, 19, 21, 29, 30, 34, 35, 39, 53,
54, 57, 61, 142, 143, 145, 150, 151, 154, 155, 199, 419, 432, 680, 722, 830
};
} // End of group constants
/**
* @desc Dummy send/receive templates for security headers
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4 Basic format elements
*/
group dummyBasicFormatElements {
/**
* @desc Dummy receive templates for security headers
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2 Specification of basic format elements
*/
group dummyBasicFormatElementsRecv {
/**
* @desc Dummy receive template for TwoDLocation
* @param p_latitude Latitude range from 900 000 000 to +900 000 000
* @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.19 TwoDLocation
*/
template (present) TwoDLocation mw_twoDLocation_dummy := {
latitude := ?,
longitude := ?
} // End of template mw_twoDLocation_dummy
/**
* @desc Dummy send template for ThreeDLocation
* @param p_latitude Latitude range from 900 000 000 to +900 000 000
* @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000
* @param p_elevation Elevation relative to the WGS-84 ellipsoid in decimetres
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.20 ThreeDLocation
*/
template (present) ThreeDLocation mw_threeDLocation_dummy := {
latitude := ?,
longitude := ?,
elevation := ?
} // End of template mw_threeDLocation_dummy
} // End of group dummyBasicFormatElementsRecv
} // End of group dummyBasicFormatElements
/**
* @desc Send/receive templates for security headers
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4 Basic format elements
*/
group basicFormatElements {
/**
* @desc Send templates for security headers
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2 Specification of basic format elements
*/
group basicFormatElementsSend {
/**
* @desc Send templates for Signature description
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature
* @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm
*/
group signatures {
/**
* @desc Send template for signatures based on ECDSA algorithm
* @member p_ecdsaSignature The ECDSA based signature
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature
*/
template (value) Signature m_signature(
in template (value) EcdsaP256Signature p_ecdsaSignature
):= {
ecdsaNistP256Signature := p_ecdsaSignature
} // End of template m_signature_ecdsa
/**
* @desc Send template for ECDSA based signature
* @member p_r The coordinate of the elliptic curve point resulting from multiplying the generator element by the ephemeral private key
* @member p_s The signature
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.10 EcdsaP256Signature
*/
template (value) EcdsaP256Signature m_ecdsaSignature(
in template (value) EccP256CurvePoint p_rSig,
in template (value) octetstring p_sSig
) := {
rSig := p_rSig,
sSig := p_sSig
} // End of template m_ecdsaSignature
} // End of group signatures
group signerInfos {
/**
* @desc Send template for self signed message
*/
template (value) SignerIdentifier m_signerIdentifier_self := {
self_ := NULL
} // End of template m_signerIdentifier_self
/**
* @desc Send template for certificate signed message
*/
template (value) SignerIdentifier m_signerIdentifier_certificate(
in template (value) Certificate p_certificate // TODO Use SingleEtsiTs103097Certificate
) := {
certificate := { p_certificate } // Only one
} // End of template m_signerIdentifier_certificate
/**
* @desc Send template for digest signed message
*/
template (value) SignerIdentifier m_signerIdentifier_digest(
in template (value) HashedId8 p_digest := '0000000000000000'O
) := {
digest := p_digest
} // End of template m_signerIdentifier_digest
/**
* @desc Send template for certificate signed message
*/
template (value) SignerIdentifier m_signerIdentifier_certificates(
in template (value) SequenceOfCertificate p_certificates := {}
) := {
certificate := p_certificates
} // End of template m_signerIdentifier_certificates
} // End of group signerInfos
/**
* @desc Send template for TwoDLocation
* @param p_latitude Latitude range from 900 000 000 to +900 000 000
* @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.19 TwoDLocation
*/
template (value) TwoDLocation m_twoDLocation(
in template (value) SecLatitude p_latitude,
in template (value) SecLongitude p_longitude
) := {
latitude := p_latitude,
longitude := p_longitude
} // End of template m_twoDLocation
/**
* @desc Send template for ThreeDLocation
* @param p_latitude Latitude range from 900 000 000 to +900 000 000
* @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000
* @param p_elevation Elevation relative to the WGS-84 ellipsoid in decimetres
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.20 ThreeDLocation
*/
template (value) ThreeDLocation m_threeDLocation(
in template (value) SecLatitude p_latitude,
in template (value) SecLongitude p_longitude,
in template (value) SecElevation p_elevation
) := {
latitude := p_latitude,
longitude := p_longitude,
elevation := p_elevation
} // End of template m_threeDLocation
/**
* @desc Send template circular geographic region
* @param p_center Circle center
* @param p_radius Circle radius
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_circle(
in template (value) TwoDLocation p_center,
in template (value) UInt16 p_radius
) := {
circularRegion := {
center := p_center,
radius := p_radius
}
} // End of template m_geographicRegion_circle
/**
* @desc Send template rectangular geographic region
* @param p_northwest Upper left corner
* @param p_southeast Lower rigth corner
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_rectangular(
in template (value) TwoDLocation p_northwest,
in template (value) TwoDLocation p_southeast
) := {
rectangularRegion := {
{
northWest := p_northwest,
southEast := p_southeast
}
}
} // End of template m_geographicRegion_rectangular
/**
* @desc Send template polygonial geographic region
* @param p_polygonal_region Polygonial region description
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_polygonial(
in template (value) PolygonalRegion p_polygonal_region
) := {
polygonalRegion := p_polygonal_region
} // End of template m_geographicRegion_polygonial
/**
* @desc Send template for geographic identified region
* @param p_identifiedRegion Indentified region
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (value) GeographicRegion m_geographicRegion_identifiedRegion(
in template (value) SequenceOfIdentifiedRegion p_identifiedRegions
) := {
identifiedRegion := p_identifiedRegions
} // End of template m_geographicRegion_identifiedRegion
template (value) IdentifiedRegion m_identifiedRegion_country_only(
in template (value) CountryOnly p_countryOnly
) := {
countryOnly := p_countryOnly
} // End of template m_identifiedRegion_country_only
template (value) IdentifiedRegion m_identifiedRegion_country_and_region(
in template (value) CountryOnly p_countryOnly,
in template (value) SequenceOfUint8 p_regions
) := {
countryAndRegions := {
countryOnly := p_countryOnly,
regions := p_regions
}
} // End of template m_identifiedRegion_country_and_region
} // End of group basicFormatElementsSend
/**
* @desc Receive templates for security headers
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2 Specification of basic format elements
*/
group basicFormatElementsRecv {
group signerIdentifiers {
/**
* @desc Recv template for message signed with digest
*/
template (present) SignerIdentifier mw_signerIdentifier_digest(
template (present) HashedId8 p_digest := ?
) := {
digest := p_digest
} // End of template mw_signerIdentifier_digest
template (present) SignerIdentifier mw_signerIdentifier_certificate(
template (present) EtsiTs103097Certificate p_certificate := ?
) := {
certificate := { p_certificate }
} // End of template m_signerIdentifier_certificate
template (present) SignerIdentifier mw_signerIdentifier_certificates(
template (present) SequenceOfCertificate p_certificates := ?
) := {
certificate := p_certificates
} // End of template mw_signerIdentifier_certificates
} // End of group signerIdentifiers
/**
* @desc Receive templates for Signature description
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature
* @see Draft ETSI TS 103 097 V1.3.1 Table 2: Derivation of field sizes depending on the used algorithm
*/
group signatures {
/**
* @desc Receive template for signatures based on ECDSA algorithm
* @member p_ecdsaSignature The ECDSA based signature
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.9 Signature
*/
template (present) Signature mw_signature(
template (present) EcdsaP256Signature p_ecdsaSignature := ?
):= {
ecdsaNistP256Signature := p_ecdsaSignature
} // End of template mw_signature
/**
* @desc Receive template for ECDSA based signature
* @member p_r The coordinate of the elliptic curve point resulting from multiplying the generator element by the ephemeral private key
* @member p_s The signature
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.10 EcdsaP256Signature
*/
template (present) EcdsaP256Signature mw_ecdsaSignature(
template (present) EccP256CurvePoint p_rSig := ?,
template (present) octetstring p_sSig := ?
) := {
rSig := p_rSig,
sSig := p_sSig
} // End of template mw_ecdsaSignature
} // End of group signatures
/**
* @desc Receive template for TwoDLocation
* @param p_latitude Latitude range from 900 000 000 to +900 000 000
* @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.19 TwoDLocation
*/
template (present) TwoDLocation mw_twoDLocation(
template (present) SecLatitude p_latitude,
template (present) SecLongitude p_longitude
) := {
latitude := p_latitude,
longitude := p_longitude
} // End of template mw_twoDLocation
/**
* @desc Receive template for ThreeDLocation
* @param p_latitude Latitude range from 900 000 000 to +900 000 000
* @param p_longitude Longitude range from 1 800 000 000 to +1 800 000 000
* @param p_elevation Elevation relative to the WGS-84 ellipsoid in decimetres
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.20 ThreeDLocation
*/
template (present) ThreeDLocation mw_threeDLocation(
template (present) SecLatitude p_latitude,
template (present) SecLongitude p_longitude,
template (present) SecElevation p_elevation
) := {
latitude := p_latitude,
longitude := p_longitude,
elevation := p_elevation
} // End of template mw_threeDLocation
/**
* @desc Receive template circular geographic region
* @param p_center Circle center
* @param p_radius Circle radius
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_circle(
template (present) TwoDLocation p_center := ?,
template (present) UInt16 p_radius := ?
) := {
circularRegion := {
center := p_center,
radius := p_radius
}
} // End of template mw_geographicRegion_circle
/**
* @desc Basic receive template rectangular geographic region
* @param p_northwest Upper left corner
* @param p_southeast Lower rigth corner
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_rectangular := {
rectangularRegion := ?
} // End of template mw_geographicRegion_rectangular
/**
* @desc Receive template polygonial geographic region
* @param p_polygonal_region Polygonial region description
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_polygonal(
template (present) PolygonalRegion p_polygonal_region := ?
) := {
polygonalRegion := p_polygonal_region
} // End of template mw_geographicRegion_polygonial
/**
* @desc Receive template for geographic identified region
* @param p_identifiedRegion Indentified region
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.21 GeographicRegion
*/
template (present) GeographicRegion mw_geographicRegion_identified(
template (present) SequenceOfIdentifiedRegion p_identifiedRegion := ?
) := {
identifiedRegion := p_identifiedRegion
} // End of template mw_geographicRegion_identifiedRegion
template (present) IdentifiedRegion mw_identifiedRegion_country_only
:= {
countryOnly := ?// FIXME ((all from c_iso3166Codes), (all from c_unStatsAdditionalCodes))
}
template (present) IdentifiedRegion mw_identifiedRegion_country_and_region := {
countryAndRegions := {
countryOnly := ?, // FIXME ((all from c_iso3166Codes), (all from c_unStatsAdditionalCodes)),
regions := ?
}
}
} // End of group basicFormatElementsRecv
} // End of group dummyBasicFormatElements
/**
* @desc Send templates for security headers
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.1 EtsiTs103097Data
*/
group etsiTs103097Data {
/**
* @desc Generic send template for EtsiTs103097Data message
*/
template (value) EtsiTs103097Data m_etsiTs103097Data(
in template (value) Ieee1609Dot2Content p_content
) := {
protocolVersion := c_protocol_version,
content := p_content
} // End of template m_etsiTs103097Data
/**
* @desc Generic receive template for EtsiTs103097Data message
*/
template (present) EtsiTs103097Data mw_etsiTs103097Data(
template (present) Ieee1609Dot2Content p_content := ?
) := {
protocolVersion := c_protocol_version,
content := p_content
} // End of template mw_etsiTs103097Data
template (value) EtsiTs103097Data m_etsiTs103097Data_unsecured(
in template (value) Opaque p_unsecuredData
) := {
protocolVersion := c_protocol_version,
content := { unsecuredData := p_unsecuredData }
} // End of template m_secured_data_unsecured
template (value) EtsiTs103097Data m_etsiTs103097Data_signed(
in template (value) SignedData p_signedData
) := {
protocolVersion := c_protocol_version,
content := { signedData := p_signedData }
} // End of template m_secured_data_signed
template (present) EtsiTs103097Data mw_etsiTs103097Data_signed(
template (present) SignedData p_signedData := ?
) := {
protocolVersion := c_protocol_version,
content := { signedData := p_signedData }
} // End of template mw_secured_data_signed
template (value) EtsiTs103097Data m_etsiTs103097Data_encrypted(
in template (value) EncryptedData p_encryptedData
) := {
protocolVersion := c_protocol_version,
content := { encryptedData := p_encryptedData }
} // End of template m_etsiTs103097Data_encrypted
template (present) EtsiTs103097Data mw_etsiTs103097Data_encrypted(
template (present) EncryptedData p_encryptedData := ?
) := {
protocolVersion := c_protocol_version,
content := { encryptedData := p_encryptedData }
} // End of template mw_etsiTs103097Data_encrypted
/**
* @desc Generic send template for EtsiTs103097Data message
*/
template (value) EtsiTs103097Data m_etsiTs103097Data_wrong_protocol(
in template (value) UInt8 p_protocol_version,
in template (value) Ieee1609Dot2Content p_content
) := {
protocolVersion := c_protocol_version,
content := p_content
} // End of template m_etsiTs103097Data_wrong_protocol
} // End of group etsiTs103097Data
/**
* @desc Send templates for ToBeSignedData header
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 SignedData
*/
group signedData {
template (value) SignedData m_signedData(
in template (value) HashAlgorithm p_hashId,
in template (value) ToBeSignedData p_tbsData,
in template (value) SignerIdentifier p_signer,
in template (value) Signature p_signature_
) := {
hashId := p_hashId,
tbsData := p_tbsData,
signer := p_signer,
signature_ := p_signature_
} // End of template m_signedData
template (present) SignedData mw_signedData(
template (present) HashAlgorithm p_hashId := ?,
template (present) ToBeSignedData p_tbsData := ?,
template (present) SignerIdentifier p_signer := ?,
template (present) Signature p_signature_ := ?
) := {
hashId := p_hashId,
tbsData := p_tbsData,
signer := p_signer,
signature_ := p_signature_
} // End of template mw_signedData
template (value) ToBeSignedData m_toBeSignedData(
in template (value) SignedDataPayload p_payload,
in template (value) HeaderInfo p_headerInfo
) := {
payload := p_payload,
headerInfo := p_headerInfo
} // End of template m_toBeSignedData
template (present) ToBeSignedData mw_toBeSignedData(
template (present) SignedDataPayload p_payload := ?,
template (present) HeaderInfo p_headerInfo := ?
) := {
payload := p_payload,
headerInfo := p_headerInfo
} // End of template mw_toBeSignedData
template (value) SignedDataPayload m_signedDataPayload(
in template (value) Ieee1609Dot2Data p_data
) := {
data := p_data,
extDataHash := omit
} // End of template m_signedDataPayload
template (present) SignedDataPayload mw_signedDataPayload(
template (present) Ieee1609Dot2Data p_data := ?
) := {
data := p_data,
extDataHash := *
} // End of template mw_signedDataPayload
template (value) SignedDataPayload m_signedDataPayload_ext(
in template (value) Oct32 p_extDataHash
) := {
data := omit,
extDataHash := { sha256HashedData := p_extDataHash }
} // End of template m_signedDataPayload_ext
} // End of group signedData
/**
* @desc Send templates for ToBeSignedData header
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.3 EncryptedData
*/
group encryptedData {
template (value) EncryptedData m_encryptedData(
in template (value) SequenceOfRecipientInfo p_recipients,
in template (value) SymmetricCiphertext p_ciphertex
) := {
recipients := p_recipients,
ciphertext := p_ciphertex
} // End of template m_encryptedData
template (present) EncryptedData mw_encryptedData(
template (present) SequenceOfRecipientInfo p_recipients := ?,
template (present) SymmetricCiphertext p_ciphertex := ?
) := {
recipients := p_recipients,
ciphertext := p_ciphertex
} // End of template mw_encryptedData
template (value) RecipientInfo m_recipientInfo_pskRecipInfo(
in template (value) PreSharedKeyRecipientInfo p_pskRecipInfo
) := {
pskRecipInfo := p_pskRecipInfo
} // End of template m_recipientInfo_pskRecipInfo
template (present) RecipientInfo mw_recipientInfo_pskRecipInfo(
template (present) PreSharedKeyRecipientInfo p_pskRecipInfo := ?
) := {
pskRecipInfo := p_pskRecipInfo
} // End of template mw_recipientInfo_pskRecipInfo
template (value) RecipientInfo m_recipientInfo_symmRecipInfo(
in template (value) SymmRecipientInfo p_symmRecipInfo
) := {
symmRecipInfo := p_symmRecipInfo
} // End of template m_recipientInfo_symmRecipInfo
template (value) RecipientInfo m_recipientInfo_certRecipInfo(
in template (value) PKRecipientInfo p_certRecipInfo
) := {
certRecipInfo := p_certRecipInfo
} // End of template m_recipientInfo_certRecipInfo
template (present) RecipientInfo mw_recipientInfo_certRecipInfo(
template (present) PKRecipientInfo p_certRecipInfo := ?
) := {
certRecipInfo := p_certRecipInfo
} // End of template mw_recipientInfo_certRecipInfo
template (value) RecipientInfo m_recipientInfo_signedDataRecipInfo(
in template (value) PKRecipientInfo p_signedDataRecipInfo
) := {
signedDataRecipInfo := p_signedDataRecipInfo
} // End of template m_recipientInfo_signedDataRecipInfo
template (value) RecipientInfo m_recipientInfo_rekRecipInfo(
in template (value) PKRecipientInfo p_rekRecipInfo
) := {
rekRecipInfo := p_rekRecipInfo
} // End of template m_recipientInfo_rekRecipInfo
template (value) PKRecipientInfo m_pKRecipientInfo(
in template (value) HashedId8 p_recipientId,
in template (value) EncryptedDataEncryptionKey p_encKey
) := {
recipientId := p_recipientId,
encKey := p_encKey
} // End of template m_pKRecipientInfo
template (present) PKRecipientInfo mw_pKRecipientInfo(
template (present) HashedId8 p_recipientId := ?,
template (present) EncryptedDataEncryptionKey p_encKey := ?
) := {
recipientId := p_recipientId,
encKey := p_encKey
} // End of template mw_pKRecipientInfo
template (value) EciesP256EncryptedKey m_evciesP256EncryptedKey(
in template (value) EccP256CurvePoint p_v,
in template (value) Oct16 p_c,
in template (value) Oct16 p_t
) :={
v := p_v,
c := p_c,
t := p_t
} // End of template m_evciesP256EncryptedKey
template (present) EciesP256EncryptedKey mw_evciesP256EncryptedKey(
template (present) EccP256CurvePoint p_v := ?,
template (present) Oct16 p_c := ?,
template (present) Oct16 p_t := ?
) :={
v := p_v,
c := p_c,
t := p_t
} // End of template mw_evciesP256EncryptedKey
template (value) EncryptedDataEncryptionKey m_encryptedDataEncryptionKey_eciesNistP256(
in template (value) EciesP256EncryptedKey p_eciesNistP256
) := {
eciesNistP256 := p_eciesNistP256
} // End of template m_encryptedDataEncryptionKey_eciesNistP256
template (present) EncryptedDataEncryptionKey mw_encryptedDataEncryptionKey_eciesNistP256(
template (present) EciesP256EncryptedKey p_eciesNistP256 := ?
) := {
eciesNistP256 := p_eciesNistP256
} // End of template mw_encryptedDataEncryptionKey_eciesNistP256
template (value) EncryptedDataEncryptionKey m_encryptedDataEncryptionKey_eciesBrainpoolP256r1(
in template (value) EciesP256EncryptedKey p_eciesBrainpoolP256r1
) := {
eciesBrainpoolP256r1 := p_eciesBrainpoolP256r1
} // End of template m_encryptedDataEncryptionKey_eciesBrainpoolP256r1
template (present) EncryptedDataEncryptionKey mw_encryptedDataEncryptionKey_eciesBrainpoolP256r1(
template (present) EciesP256EncryptedKey p_eciesBrainpoolP256r1 := ?
) := {
eciesBrainpoolP256r1 := p_eciesBrainpoolP256r1
} // End of template mw_encryptedDataEncryptionKey_eciesBrainpoolP256r1
template (value) SymmetricCiphertext m_SymmetricCiphertext_aes128ccm(
in template (value) AesCcmCiphertext p_aes128ccm
) := {
aes128ccm := p_aes128ccm
} // End of template m_SymmetricCiphertext_aes128ccm
template (present) SymmetricCiphertext mw_SymmetricCiphertext_aes128ccm(
template (present) AesCcmCiphertext p_aes128ccm := ?
) := {
aes128ccm := p_aes128ccm
} // End of template mw_SymmetricCiphertext_aes128ccm
template (value) AesCcmCiphertext m_aesCcmCiphertext(
in template (value) Oct12 p_nonce,
in template (value) Opaque p_ccmCiphertext
) := {
nonce := p_nonce,
ccmCiphertext := p_ccmCiphertext
} // End of template m_aesCcmCiphertext
template (present) AesCcmCiphertext mw_aesCcmCiphertext(
template (present) Oct12 p_nonce := ?,
template (present) Opaque p_ccmCiphertext := ?
) := {
nonce := p_nonce,
ccmCiphertext := p_ccmCiphertext
} // End of template mw_aesCcmCiphertext
} // End of group encryptedData
/**
* @desc Send/Receive templates for Payload
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
group ieee1609Dot2Data {
/**
* @desc Send template for Ieee1609Dot2Data
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
template (value) Ieee1609Dot2Data m_ieee1609Dot2Data(
in template (value) Ieee1609Dot2Content p_content
) := {
protocolVersion := c_protocol_version,
content := p_content
} // End of template m_ieee1609Dot2Data
/**
* @desc Receive template for Ieee1609Dot2Data
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
template (present) Ieee1609Dot2Data mw_ieee1609Dot2Data(
template (present) Ieee1609Dot2Content p_content := ?
) := {
protocolVersion := c_protocol_version,
content := p_content
} // End of template mw_ieee1609Dot2Data
/**
* @desc Send template for 'unsecured' Payload
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
template (value) Ieee1609Dot2Content m_ieee1609Dot2Data_unsecured(
in template (value) Opaque p_unsecuredData
) := {
unsecuredData := p_unsecuredData
} // End of template m_ieee1609Dot2Data_unsecured
/**
* @desc Receive template for 'unsecured' Payload
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
template (present) Ieee1609Dot2Content mw_ieee1609Dot2Data_unsecured(
template (present) Opaque p_unsecuredData := ?
) := {
unsecuredData := p_unsecuredData
} // End of template mw_ieee1609Dot2Data_unsecured
/**
* @desc Send template for 'signed' Payload
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
template (value) Ieee1609Dot2Content m_ieee1609Dot2Data_signed(
in template (value) SignedData p_signedData
) := {
signedData := p_signedData
} // End of template m_ieee1609Dot2Data_signed
/**
* @desc Send template for 'signed' Payload
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.2 Payload
*/
template (present) Ieee1609Dot2Content mw_ieee1609Dot2Data_signed(
template (present) SignedData p_signedData := ?
) := {
signedData := p_signedData
} // End of template mw_ieee1609Dot2Data_signed
} // End of group ieee1609Dot2Data
/**
* @desc Send/Receive templates for HeaderInfo
* @see Draft ETSI TS 103 097 V1.3.1 Clause 5.4 HeaderInfo
*/
group headerFields {
/**
* @desc Basic send HeaderInfo template with ETSI ITS restrction
*/
template (omit) HeaderInfo m_ieee1609Dot2_headerInfo(
in template (value) Psid p_psid
) := {
psid := p_psid,
generationTime := omit,
expiryTime := omit,
generationLocation := omit,
p2pcdLearningRequest := omit,
missingCrlIdentifier := omit,
encryptionKey := omit,
inlineP2pcdRequest := omit,
requestedCertificate := omit
} // End of template m_ieee1609Dot2_headerInfo
/**
* @desc Basic receive HeaderInfo template with ETSI ITS restrction
*/
template (present) HeaderInfo mw_ieee1609Dot2_headerInfo(
template (present) Psid p_psid := ?
) := {
psid := p_psid,
generationTime := *,
expiryTime := *,
generationLocation := *,
p2pcdLearningRequest := omit,
missingCrlIdentifier := omit,
encryptionKey := omit,
inlineP2pcdRequest := omit,
requestedCertificate := omit
} // End of template mw_ieee1609Dot2_headerInfo
/**
* @desc Basic receive HeaderInfo template with ETSI ITS restrction
*/
template (present) HeaderInfo mw_ieee1609Dot2_headerInfo_request_certificate(
template (present) Psid p_psid := ?,
template (present) Certificate p_requestedCertificate := ?
) modifies mw_ieee1609Dot2_headerInfo := {
psid := p_psid,
generationTime := *,
expiryTime := *,
generationLocation := *,
p2pcdLearningRequest := omit,
missingCrlIdentifier := omit,
encryptionKey := omit,
inlineP2pcdRequest := omit,
requestedCertificate := p_requestedCertificate
} // End of template mw_ieee1609Dot2_headerInfo
/**
* @desc CAM specific send HeaderInfo template with ETSI ITS restrction
*
* @see Clause 7.1.1 Security profile for CAMs
*/
template (omit) HeaderInfo m_headerInfo_cam(
in template (value) Psid p_psid := c_its_aid_CAM,
in template (value) Time64 p_generationTime,
in template (omit) Time64 p_expiryTime := omit,
in template (omit) SequenceOfHashedId3 p_inlineP2pcdRequest := omit
) modifies m_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime,
expiryTime := p_expiryTime,
generationLocation := omit,
inlineP2pcdRequest := p_inlineP2pcdRequest
} // End of template m_headerInfo_cam
/**
* @desc CAM specific receive HeaderInfo template with ETSI ITS restrction
*
* Clause 7.1.1 Security profile for CAMs
*/
template (present) HeaderInfo mw_headerInfo_cam(
template (present) Psid p_psid := c_its_aid_CAM,
template (present) Time64 p_generationTime := ?,
template SequenceOfHashedId3 p_inlineP2pcdRequest := omit,
template Certificate p_requestedCertificate := omit
) modifies mw_ieee1609Dot2_headerInfo := {
psid := c_its_aid_CAM,
generationTime := p_generationTime,
expiryTime := omit,
generationLocation := omit,
inlineP2pcdRequest := p_inlineP2pcdRequest,
requestedCertificate := p_requestedCertificate
} // End of template mw_headerInfo_cam
/**
*
* Clause 7.1.2 Security profile for DENMs
*/
template (omit) HeaderInfo m_headerInfo_denm(
in template (value) Psid p_psid := c_its_aid_DENM,
in template (value) Time64 p_generationTime,
in template (value) ThreeDLocation p_generationLocation,
in template (omit) Time64 p_expiryTime := omit
) modifies m_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime,
expiryTime := p_expiryTime,
generationLocation := p_generationLocation
} // End of template m_headerInfo_denm
/**
*
* Clause 7.1.2 Security profile for DENMs
*/
template (present) HeaderInfo mw_headerInfo_denm(
template (present) Psid p_psid := c_its_aid_DENM,
template (present) Time64 p_generationTime := ?,
template (present) ThreeDLocation p_generationLocation := ?,
template Time64 p_expiryTime := omit
) modifies mw_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime,
expiryTime := p_expiryTime,
generationLocation := p_generationLocation
} // End of template mw_headerInfo_denm
/**
*
* Clause 7.1.3 Generic security profile for other signed messages
*/
template (omit) HeaderInfo m_headerInfo_gn(
in template (value) Psid p_psid := c_its_aid_GN,
in template (value) Time64 p_generationTime
) modifies m_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime
} // End of template m_headerInfo_gn
/**
*
* Clause 7.1.3 Generic security profile for other signed messages
*/
template (present) HeaderInfo mw_headerInfo_gn(
template (present) Psid p_psid := c_its_aid_GN,
template (present) Time64 p_generationTime := ?
) modifies mw_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime,
expiryTime := *,
generationLocation := *,
encryptionKey := *,
inlineP2pcdRequest := *,
requestedCertificate := *
} // End of template mw_headerInfo_gn
template (omit) HeaderInfo m_headerInfo_inner_pki_request(
in template (value) Psid p_psid := c_its_aid_SCR,
in template (value) Time64 p_generationTime
) modifies m_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime
};
template (omit) HeaderInfo m_headerInfo_inner_pki_response(
in template (value) Psid p_psid := c_its_aid_SCR,
in template (value) Time64 p_generationTime
) modifies m_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime
};
template (present) HeaderInfo mw_headerInfo_inner_pki_request(
template (present) Psid p_psid := c_its_aid_SCR,
template (present) Time64 p_generationTime := ?
) modifies mw_headerInfo_gn := {};
template HeaderInfo mw_headerInfo_inner_pki_response(
template (present) Psid p_psid := c_its_aid_SCR,
template Time64 p_generationTime := *
) modifies mw_ieee1609Dot2_headerInfo := {
generationTime := p_generationTime,
expiryTime := omit,
generationLocation := omit
}
} // End of group headerFields
group signatures {
template (value) Signature m_signature_ecdsaNistP256(
in template (value) EcdsaP256Signature p_ecdsaNistP256Signature
) := {
ecdsaNistP256Signature := p_ecdsaNistP256Signature
} // End of template m_signature_ecdsaNistP256
template (present) Signature mw_signature_ecdsaNistP256(
template (present) EcdsaP256Signature p_ecdsaNistP256Signature := ?
) := {
ecdsaNistP256Signature := p_ecdsaNistP256Signature
} // End of template mw_signature_ecdsaNistP256
template (value) Signature m_signature_ecdsaBrainpoolP256r1(
in template (value) EcdsaP256Signature p_ecdsaBrainpoolP256r1Signature
) := {
ecdsaBrainpoolP256r1Signature := p_ecdsaBrainpoolP256r1Signature
} // End of template m_signature_ecdsaBrainpoolP256r1
template (present) Signature mw_signature_ecdsaBrainpoolP256r1(
template (present) EcdsaP256Signature p_ecdsaBrainpoolP256r1Signature := ?
) := {
ecdsaBrainpoolP256r1Signature := p_ecdsaBrainpoolP256r1Signature
} // End of template m_signature_ecdsaBrainpoolP256r1
template (value) Signature m_signature_ecdsaBrainpoolP384r1(
in template (value) EcdsaP384Signature p_ecdsaBrainpoolP384r1Signature
) := {
ecdsaBrainpoolP384r1Signature := p_ecdsaBrainpoolP384r1Signature
} // End of template m_signature_ecdsaBrainpoolP384r1
template (present) Signature mw_signature_ecdsaBrainpoolP384r1(
template (present) EcdsaP384Signature p_ecdsaBrainpoolP384r1Signature := ?
) := {
ecdsaBrainpoolP384r1Signature := p_ecdsaBrainpoolP384r1Signature
} // End of template mw_signature_ecdsaBrainpoolP384r1
template (value) EcdsaP256Signature m_ecdsaP256Signature(
in template (value) EccP256CurvePoint p_rSig,
in template (value) Oct32 p_sSig
) := {
rSig := p_rSig,
sSig := p_sSig
} // End of template m_ecdsaP256Signature
template (present) EcdsaP256Signature mw_ecdsaP256Signature(
template (present) EccP256CurvePoint p_rSig := ?,
template (present) Oct32 p_sSig := ?
) := {
rSig := p_rSig,
sSig := p_sSig
} // End of template mw_ecdsaP256Signature
template (value) EcdsaP384Signature m_ecdsaP384Signature(
in template (value) EccP384CurvePoint p_rSig,
in template (value) Oct48 p_sSig
) := {
rSig := p_rSig,
sSig := p_sSig
} // End of template m_ecdsaP384Signature
template (present) EcdsaP384Signature mw_ecdsaP384Signature(
template (present) EccP384CurvePoint p_rSig := ?,
template (present) Oct48 p_sSig := ?
) := {
rSig := p_rSig,
sSig := p_sSig
} // End of template mw_ecdsaP384Signature
template (value) EccP256CurvePoint m_eccP256CurvePoint_x_only(
in template (value) Oct32 p_x_only
) := {
x_only := p_x_only
} // End of template m_eccP256CurvePoint_x_only
template (present) EccP256CurvePoint mw_eccP256CurvePoint_x_only(
template (present) Oct32 p_x_only := ?
) := {
x_only := p_x_only
} // End of template mw_eccP256CurvePoint_x_only
template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_0(
in template (value) Oct32 p_compressed_y_0
) := {
compressed_y_0 := p_compressed_y_0
} // End of template m_eccP256CurvePoint_compressed_y_0
template (present) EccP256CurvePoint mw_eccP256CurvePoint_compressed_y_0(
template (present) Oct32 p_compressed_y_0 := ?
) := {
compressed_y_0 := p_compressed_y_0
} // End of template mw_eccP256CurvePoint_compressed_y_0
template (value) EccP256CurvePoint m_eccP256CurvePoint_compressed_y_1(
in template (value) Oct32 p_compressed_y_1
) := {
compressed_y_1 := p_compressed_y_1
} // End of template m_eccP256CurvePoint_compressed_y_1
template (present) EccP256CurvePoint mw_eccP256CurvePoint_compressed_y_1(
template (present) Oct32 p_compressed_y_1 := ?
) := {
compressed_y_1 := p_compressed_y_1
} // End of template mw_eccP256CurvePoint_compressed_y_1
template (value) EccP256CurvePoint m_eccP256CurvePoint_uncompressed(
in template (value) Oct32 p_x,
in template (value) Oct32 p_y
) := {
uncompressedP256 := {
x := p_x,
y := p_y
}
} // End of template m_eccP256CurvePoint_uncompressed
template (present) EccP256CurvePoint mw_eccP256CurvePoint_uncompressed(
template (present) Oct32 p_x := ?,
template (present) Oct32 p_y := ?
) := {
uncompressedP256 := {
x := p_x,
y := p_y
}
} // End of template mw_eccP256CurvePoint_uncompressed
template (value) EccP384CurvePoint m_eccP384CurvePoint_x_only(
in template (value) Oct48 p_x_only
) := {
x_only := p_x_only
} // End of template m_eccP384CurvePoint_x_only
template (present) EccP384CurvePoint mw_eccP384CurvePoint_x_only(
template (present) Oct48 p_x_only := ?
) := {
x_only := p_x_only
} // End of template mw_eccP384CurvePoint_x_only
template (value) EccP384CurvePoint m_eccP384CurvePoint_compressed_y_0(
in template (value) Oct48 p_compressed_y_0
) := {
compressed_y_0 := p_compressed_y_0
} // End of template m_eccP384CurvePoint_compressed_y_0
template (present) EccP384CurvePoint mw_eccP384CurvePoint_compressed_y_0(
template (present) Oct48 p_compressed_y_0 := ?
) := {
compressed_y_0 := p_compressed_y_0
} // End of template mw_eccP384CurvePoint_compressed_y_0
template (value) EccP384CurvePoint m_eccP384CurvePoint_compressed_y_1(
in template (value) Oct48 p_compressed_y_1
) := {
compressed_y_1 := p_compressed_y_1
} // End of template m_eccP384CurvePoint_compressed_y_1
template (present) EccP384CurvePoint mw_eccP384CurvePoint_compressed_y_1(
template (present) Oct48 p_compressed_y_1 := ?
) := {
compressed_y_1 := p_compressed_y_1
} // End of template mw_eccP384CurvePoint_compressed_y_1
template (value) EccP384CurvePoint m_eccP384CurvePoint_uncompressed(
in template (value) Oct48 p_x,
in template (value) Oct48 p_y
) := {
uncompressedP384 := {
x := p_x,
y := p_y
}
} // End of template m_eccP384CurvePoint_uncompressed
template (present) EccP384CurvePoint mw_eccP384CurvePoint_uncompressed(
template (present) Oct48 p_x := ?,
template (present) Oct48 p_y := ?
) := {
uncompressedP384 := {
x := p_x,
y := p_y
}
} // End of template mw_eccP384CurvePoint_uncompressed
} // End of group signatures
/**
* @desc Dummy send/receive templates for certificates
* @see Draft ETSI TS 103 097 V1.3.1 Clause 6 Specification of certificate format
*/
group certificates {
/**
* @desc Send certificate template of type explicit (signature is included)
* @member p_signer_info Signer information
* @member p_subject_info The subject information
* @member p_subject_attributes List of subject attribute
* @member p_validity_restrictions List of validity restriction
* @member p_signature The signature
* @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1 Certificate
*/
template (omit) EtsiTs103097Certificate m_etsiTs103097Certificate(
in template (value) IssuerIdentifier p_issuer,
in template (value) ToBeSignedCertificate p_toBeSigned,
in template (omit) Signature p_signature_ := omit,
in template (value) CertificateType p_type_ := explicit
) := {
version := c_certificate_version,
type_ := p_type_,
issuer := p_issuer,
toBeSigned := p_toBeSigned,
signature_ := p_signature_
} // End of template m_etsiTs103097Certificate
/**
* @desc Send certificate template of type explicit (signature is included)
* @member p_signer_info Signer information
* @member p_subject_info The subject information
* @member p_subject_attributes List of subject attribute
* @member p_validity_restrictions List of validity restriction
* @member p_signature The signature
* @see Draft ETSI TS 103 097 V1.3.1 Clause 6.1 Certificate
*/
template (present) EtsiTs103097Certificate mw_etsiTs103097Certificate(
template (present) IssuerIdentifier p_issuer := ?,
template (present) ToBeSignedCertificate p_toBeSigned := ?,
template Signature p_signature_ := ?,
template (present) CertificateType p_type_ := explicit
) := {
version := c_certificate_version,
type_ := p_type_,
issuer := p_issuer,
toBeSigned := p_toBeSigned,
signature_ := p_signature_
} // End of template mw_etsiTs103097Certificate
} // End of group certificates
group issuerIdentifier {
template (value) IssuerIdentifier m_issuerIdentifier_self(
in template (value) HashAlgorithm p_self := sha256
) := {
self_ := p_self
} // End of template m_issuerIdentifier_self
template (present) IssuerIdentifier mw_issuerIdentifier_self(
template (present) HashAlgorithm p_self := ?
) := {
self_ := p_self
} // End of template mw_issuerIdentifier_self
template (value) IssuerIdentifier m_issuerIdentifier_sha256AndDigest( // FIXME Add opque field for unknown issuer?
in template (value) HashedId8 p_sha256AndDigest
) := {
sha256AndDigest := p_sha256AndDigest
} // End of template m_issuerIdentifier_sha256AndDigest
template (present) IssuerIdentifier mw_issuerIdentifier_sha256AndDigest( // FIXME Add opque field for unknown issuer?
template (present) HashedId8 p_sha256AndDigest := ?
) := {
sha256AndDigest := p_sha256AndDigest
} // End of template mw_issuerIdentifier_sha256AndDigest
template (value) IssuerIdentifier m_issuerIdentifier_sha384AndDigest(
in template (value) HashedId8 p_sha384AndDigest
) := {
sha384AndDigest := p_sha384AndDigest
} // End of template m_issuerIdentifier_sha384AndDigest
template (present) IssuerIdentifier mw_issuerIdentifier_sha384AndDigest(
template (present) HashedId8 p_sha384AndDigest := ?
) := {
sha384AndDigest := p_sha384AndDigest
} // End of template mw_issuerIdentifier_sha384AndDigest
} // End of group issuerIdentifier
group toBeSignedCertificate {
/**
* @desc Send template for ToBeSignedCertificate with CA restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificate
*/
template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ca(
in template (value) CertificateId p_id,
in template (value) SequenceOfPsidSsp p_appPermissions,
in template (value) SequenceOfPsidGroupPermissions p_certIssuePermissions,
in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
in template (omit) ValidityPeriod p_validityPeriod := omit,
in template (omit) GeographicRegion p_region := omit,
in template (omit) SubjectAssurance p_assuranceLevel := omit,
in template (omit) PublicEncryptionKey p_encryptionKey := omit
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := p_certIssuePermissions, // ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificates Bullet 4
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template m_toBeSignedCertificate_ca
/**
* @desc Receive template for ToBeSignedCertificate with CA restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.3 Root CA certificate
*/
template ToBeSignedCertificate mw_toBeSignedCertificate_ca(
template (present) CertificateId p_id := ?,
template (present) SequenceOfPsidSsp p_appPermissions := ?,
template (present) SequenceOfPsidGroupPermissions p_certIssuePermissions := ?,
template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
template (present) ValidityPeriod p_validityPeriod := ?,
template SequenceOfPsidGroupPermissions p_certRequestPermissions := *,
template GeographicRegion p_region := *,
template SubjectAssurance p_assuranceLevel := *,
template PublicEncryptionKey p_encryptionKey := *
) := {
id := p_id,
cracaId := '000000'O,
crlSeries := 0,
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := ?,
certIssuePermissions := p_certIssuePermissions,
certRequestPermissions := p_certRequestPermissions,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template mw_toBeSignedCertificate_ca
/**
* @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential
*/
template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ea(
in template (value) CertificateId p_id,
in template (value) SequenceOfPsidSsp p_appPermissions,
in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
in template (value) ValidityPeriod p_validityPeriod,
in template (omit) GeographicRegion p_region := omit,
in template (omit) SubjectAssurance p_assuranceLevel := omit,
in template (omit) PublicEncryptionKey p_encryptionKey := omit
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template m_toBeSignedCertificate_ea
/**
* @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential
*/
template ToBeSignedCertificate mw_toBeSignedCertificate_ea(
template (present) CertificateId p_id := ?,
template (present) SequenceOfPsidSsp p_appPermissions := ?,
template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
template (present) ValidityPeriod p_validityPeriod := ?,
template GeographicRegion p_region := *,
template SubjectAssurance p_assuranceLevel := *,
template PublicEncryptionKey p_encryptionKey := *
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template mw_toBeSignedCertificate_ea
template (omit) ToBeSignedCertificate m_toBeSignedCertificate_ec(
in template (value) CertificateId p_id,
in template (value) SequenceOfPsidSsp p_appPermissions,
in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
in template (value) ValidityPeriod p_validityPeriod,
in template (omit) GeographicRegion p_region := omit,
in template (omit) SubjectAssurance p_assuranceLevel := omit,
in template (omit) PublicEncryptionKey p_encryptionKey := omit
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template m_toBeSignedCertificate_ec
/**
* @desc Send template for ToBeSignedCertificate with Enrolment credential restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.2 Enrolment credential
*/
template ToBeSignedCertificate mw_toBeSignedCertificate_ec(
template (present) CertificateId p_id := ?,
template (present) SequenceOfPsidSsp p_appPermissions := ?,
template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
template (present) ValidityPeriod p_validityPeriod := ?,
template GeographicRegion p_region := *,
template SubjectAssurance p_assuranceLevel := *,
template PublicEncryptionKey p_encryptionKey := *
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template mw_toBeSignedCertificate_ec
/**
* @desc Send template for ToBeSignedCertificate with Authorization authority restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.4 Subordinate certification authority certificates
*/
template (omit) ToBeSignedCertificate m_toBeSignedCertificate_aa(
in template (value) CertificateId p_id,
in template (value) SequenceOfPsidSsp p_appPermissions,
in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
in template (value) ValidityPeriod p_validityPeriod,
in template (omit) GeographicRegion p_region := omit,
in template (omit) SubjectAssurance p_assuranceLevel := omit,
in template (omit) PublicEncryptionKey p_encryptionKey := omit
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template m_toBeSignedCertificate_aa
/**
* @desc Send template for ToBeSignedCertificate with Authorization authority restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.4 Subordinate certification authority certificates
*/
template ToBeSignedCertificate mw_toBeSignedCertificate_aa(
template (present) CertificateId p_id := ?,
template (present) SequenceOfPsidSsp p_appPermissions := ?,
template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
template (present) ValidityPeriod p_validityPeriod := ?,
template GeographicRegion p_region := *,
template SubjectAssurance p_assuranceLevel := *,
template PublicEncryptionKey p_encryptionKey := *
) := {
id := p_id,
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template mw_toBeSignedCertificate_aa
template (present) CertificateId mw_certificateId_name(
template (present) charstring p_name := ?
) := {
name := p_name
} // End of template mw_certificateId_name
template CertificateId mw_certificateId_none := {
none_ := NULL
} // End of template mw_certificateId_none
/**
* @desc Send template for ToBeSignedCertificate with AT restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets
*/
template (omit) ToBeSignedCertificate m_toBeSignedCertificate_at(
in template (value) SequenceOfPsidSsp p_appPermissions,
in template (value) VerificationKeyIndicator p_verifyKeyIndicator,
in template (omit) ValidityPeriod p_validityPeriod := omit,
in template (omit) GeographicRegion p_region := omit,
in template (omit) SubjectAssurance p_assuranceLevel := omit,
in template (omit) PublicEncryptionKey p_encryptionKey := omit
) := {
id := { none_ := NULL },
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template m_toBeSignedCertificate_at
/**
* @desc Send template for ToBeSignedCertificate with AT restrictions
* @see ETSI TS 103 097 V1.3.1 Clause 7.2.1 Authorization tickets
*/
template ToBeSignedCertificate mw_toBeSignedCertificate_at(
template (present) SequenceOfPsidSsp p_appPermissions := ?,
template (present) VerificationKeyIndicator p_verifyKeyIndicator := ?,
template (present) ValidityPeriod p_validityPeriod := ?,
template GeographicRegion p_region := *,
template SubjectAssurance p_assuranceLevel := *,
template PublicEncryptionKey p_encryptionKey := *
) := {
id := { none_ := NULL },
cracaId := '000000'O, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 2
crlSeries := 0, // ETSI TS 103 097 V1.3.1 Clause 6 Bullet 3
validityPeriod := p_validityPeriod,
region := p_region,
assuranceLevel := p_assuranceLevel,
appPermissions := p_appPermissions,
certIssuePermissions := omit,
certRequestPermissions := omit,
canRequestRollover := omit,
encryptionKey := p_encryptionKey,
verifyKeyIndicator := p_verifyKeyIndicator
} // End of template mw_toBeSignedCertificate_at
} // End of group toBeSignedCertificate
group verificationKeys {
template (value) VerificationKeyIndicator m_verificationKeyIndicator_verificationKey(
in template (value) PublicVerificationKey p_verificationKey
) := {
verificationKey := p_verificationKey
} // End of template m_verificationKeyIndicator_verificationKey
template (present) VerificationKeyIndicator mw_verificationKeyIndicator_verificationKey(
template (present) PublicVerificationKey p_verificationKey := ?
) := {
verificationKey := p_verificationKey
} // End of template mw_verificationKeyIndicator_verificationKey
template (value) VerificationKeyIndicator m_verificationKeyIndicator_reconstructionValue(
in template (value) EccP256CurvePoint p_reconstructionValue
) := {
reconstructionValue := p_reconstructionValue
} // End of template m_verificationKeyIndicator_reconstructionValue
template (present) VerificationKeyIndicator mw_verificationKeyIndicator_reconstructionValue(
template (present) EccP256CurvePoint p_reconstructionValue := ?
) := {
reconstructionValue := p_reconstructionValue
} // End of template mw_verificationKeyIndicator_reconstructionValue
template (value) PublicVerificationKey m_publicVerificationKey_ecdsaNistP256(
in template (value) EccP256CurvePoint p_ecdsaNistP256
) := {
ecdsaNistP256 := p_ecdsaNistP256
} // End of template m_publicVerificationKey_ecdsaNistP256
template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaNistP256(
template (present) EccP256CurvePoint p_ecdsaNistP256 := ?
) := {
ecdsaNistP256 := p_ecdsaNistP256
} // End of template mw_publicVerificationKey_ecdsaNistP256
template (value) PublicVerificationKey m_publicVerificationKey_ecdsaBrainpoolP256r1(
in template (value) EccP256CurvePoint p_ecdsaBrainpoolP256r1
) := {
ecdsaBrainpoolP256r1 := p_ecdsaBrainpoolP256r1
} // End of template m_publicVerificationKey_ecdsaBrainpoolP256r1
template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaBrainpoolP256r1(
template (present) EccP256CurvePoint p_ecdsaBrainpoolP256r1 := ?
) := {
ecdsaBrainpoolP256r1 := p_ecdsaBrainpoolP256r1
} // End of template mw_publicVerificationKey_ecdsaBrainpoolP256r1
template (value) PublicVerificationKey m_publicVerificationKey_ecdsaBrainpoolP384r1(
in template (value) EccP384CurvePoint p_ecdsaBrainpoolP384r1
) := {
ecdsaBrainpoolP384r1 := p_ecdsaBrainpoolP384r1
} // End of template m_publicVerificationKey_ecdsaBrainpoolP384r1
template (present) PublicVerificationKey mw_publicVerificationKey_ecdsaBrainpoolP384r1(
template (present) EccP384CurvePoint p_ecdsaBrainpoolP384r1 := ?
) := {
ecdsaBrainpoolP384r1 := p_ecdsaBrainpoolP384r1
} // End of template mw_publicVerificationKey_ecdsaBrainpoolP384r1
} // End of group verificationKeys
group encryptionKey {
template (value) EncryptionKey m_encryptionKey_public(
in template (value) PublicEncryptionKey p_encryptionKey
) := {
public_ := p_encryptionKey
}
template (present) EncryptionKey mw_encryptionKey_public(
template (present) PublicEncryptionKey p_encryptionKey := ?
) := {
public_ := p_encryptionKey
}
template (value) PublicEncryptionKey m_encryptionKey(
in template (value) SymmAlgorithm p_supportedSymmAlg := aes128Ccm,
in template (value) BasePublicEncryptionKey p_publicKey
) := {
supportedSymmAlg := p_supportedSymmAlg,
publicKey := p_publicKey
} // End of template m_encryptionKey
template (present) PublicEncryptionKey mw_encryptionKey(
template (present) SymmAlgorithm p_supportedSymmAlg := aes128Ccm,
template (present) BasePublicEncryptionKey p_publicKey := ?
) := {
supportedSymmAlg := p_supportedSymmAlg,
publicKey := p_publicKey
} // End of template mw_encryptionKey
template (value) BasePublicEncryptionKey m_publicEncryptionKey_eciesNistP256(
in template (value) EccP256CurvePoint p_eciesNistP256
) := {
eciesNistP256 := p_eciesNistP256
} // End of template m_publicEncryptionKey_eciesNistP256
template (present) BasePublicEncryptionKey mw_publicEncryptionKey_eciesNistP256(
template (present) EccP256CurvePoint p_eciesNistP256 := ?
) := {
eciesNistP256 := p_eciesNistP256
} // End of template mw_publicEncryptionKey_eciesNistP256
template (value) BasePublicEncryptionKey m_publicEncryptionKey_eciesBrainpoolP256r1(
in template (value) EccP256CurvePoint p_eciesBrainpoolP256r1
) := {
eciesBrainpoolP256r1 := p_eciesBrainpoolP256r1
} // End of template m_publicEncryptionKey_eciesBrainpoolP256r1
template (present) BasePublicEncryptionKey mw_publicEncryptionKey_eciesBrainpoolP256r1(
template (present) EccP256CurvePoint p_eciesBrainpoolP256r1 := ?
) := {
eciesBrainpoolP256r1 := p_eciesBrainpoolP256r1
} // End of template mw_publicEncryptionKey_eciesBrainpoolP256r1
} // End of group encryptionKey
group appPermissions {
template (omit) PsidSsp m_appPermissions(
in template (value) Psid p_psid,
in template (omit) ServiceSpecificPermissions p_ssp := omit
) := {
psid := p_psid,
ssp := p_ssp
} // End of template m_appPermissions
template PsidSsp mw_appPermissions(
template (present) Psid p_psid := ?,
template ServiceSpecificPermissions p_ssp := *
) := {
psid := p_psid,
ssp := p_ssp
} // End of template mw_appPermissions
template (value) PsidSspRange m_psidSspRange(
in Psid p_psid,
in template (value) SspRange p_sspRange := m_SspRange_all
) := {
psid := p_psid,
sspRange := p_sspRange
} // End of template m_psidSspRange
template (value) SspRange m_SspRange_all := {
all_ := NULL
} // End of template m_SspRange_all
template (value) SspRange m_SspRange_opaque(
in template (value) SequenceOfOctetString p_opaque
) := {
opaque := p_opaque
} // End of template m_SspRange_opaque
template (value) SspRange m_SspRange_bitmapSspRange(
in template (value) BitmapSspRange p_bitmapSspRange
) := {
bitmapSspRange := p_bitmapSspRange
} // End of template m_SspRange_bitmapSspRange
template (value) PsidGroupPermissions m_psidGroupPermissions(
in template (value) SubjectPermissions p_subjectPermissions,
in integer p_minChainLength := 1,
in integer p_chainLengthRange := 0,
in EndEntityType p_eeType := oct2bit('00'O)
) := {
subjectPermissions := p_subjectPermissions,
minChainLength := p_minChainLength,
chainLengthRange := p_chainLengthRange,
eeType := p_eeType
} // End of template m_psidGroupPermissions
template (present) PsidGroupPermissions mw_psidGroupPermissions(
template (present) SubjectPermissions p_subjectPermissions := ?,
integer p_minChainLength := 1,
integer p_chainLengthRange := 0,
template (present) EndEntityType p_eeType := ?
) := {
subjectPermissions := p_subjectPermissions,
minChainLength := p_minChainLength,
chainLengthRange := p_chainLengthRange,
eeType := p_eeType
} // End of template mw_psidGroupPermissions
template (value) SubjectPermissions m_subjectPermissions_explicit(
in template (value) SequenceOfPsidSspRange p_certIssuePermissions
) := {
explicit := p_certIssuePermissions
} // End of template m_subjectPermissions_explicit
template (present) SubjectPermissions mw_subjectPermissions_explicit(
template (present) SequenceOfPsidSspRange p_certIssuePermissions := ?
) := {
explicit := p_certIssuePermissions
} // End of template mw_subjectPermissions_explicit
template (value) SubjectPermissions m_subjectPermissions_all := {
all_ := NULL
} // End of template m_subjectPermissions_all
} // End of group appPermissions
group validityRestriction {
template (value) ValidityPeriod m_validityPeriod(
in template (value) Time32 p_start_,
in template (value) Duration p_duration
) := {
start_ := p_start_,
duration := p_duration
} // End of template m_validityPeriod
template (present) ValidityPeriod mw_validityPeriod(
template (present) Time32 p_start_ := ?,
template (present) Duration p_duration := ?
) := {
start_ := p_start_,
duration := p_duration
} // End of template mw_validityPeriod
/**
* @desc Send template for Duration (in seconds)
* @param p_duration The duration value
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18 Duration
*/
template (value) Duration m_duration_in_seconds(
in template (value) Int16 p_duration
) := {
seconds := p_duration
} // End of template m_duration_in_seconds
/**
* @desc Send template for Duration (in hours)
* @param p_duration The duration value
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18 Duration
*/
template (value) Duration m_duration_in_hours(
in template (value) Int16 p_duration
) := {
hours := p_duration
} // End of template m_duration_in_hours
/**
* @desc Receive template for Duration (in seconds)
* @param p_duration The duration value
* @see Draft ETSI TS 103 097 V1.3.1 Clause 4.2.18 Duration
*/
template (present) Duration mw_duration_in_seconds(
template (present) Int16 p_duration := ?
) := {
seconds := p_duration
} // End of template mw_duration_in_seconds
template (value) Duration m_duration_years(
in template (value) Uint16 p_years
) := {
years := p_years
} // End of template m_duration_years
template (present) Duration mw_duration_years(
template (present) Uint16 p_years := ?
) := {
years := p_years
} // End of template mw_duration_years
} // End of group validityRestriction
group ssp {
group sspCam {
group sspCamSend {
template (value) SspCAM m_sspCAMContainer_sign_all := {
cenDsrcTollingZone := '1'B,
publicTransport := '1'B,
specialTransport := '1'B,
dangerousGoods := '1'B,
roadwork := '1'B,
rescue := '1'B,
emergency := '1'B,
safetyCar := '1'B,
closedLanes := '1'B,
requestForRightOfWay := '1'B,
requestForFreeCrossingAtATrafficLight := '1'B,
noPassing := '1'B,
noPassingForTrucks := '1'B,
speedLimit := '1'B,
reserved := '000000000000000000'B
} // End of template m_sspCAMContainer_sign_all
template (value) SspCAM m_sspCAMContainer_vehicle
modifies m_sspCAMContainer_sign_all := {
cenDsrcTollingZone := '0'B,
closedLanes := '0'B,
noPassing := '0'B,
noPassingForTrucks := '0'B,
speedLimit := '0'B
} // End of template m_sspCAMContainer_vehicle
template (value) ServiceSpecificPermissions m_sspCAM(
in template (value) BitmapSsp p_bitmapSsp
) := {
bitmapSsp := p_bitmapSsp
} // End of template m_sspCAM
} // End of group sspCamSend
group sspCamRecv {
template (present) SspCAM mw_sspCAMContainer_dummy := {
cenDsrcTollingZone := ?,
publicTransport := ?,
specialTransport := ?,
dangerousGoods := ?,
roadwork := ?,
rescue := ?,
emergency := ?,
safetyCar := ?,
closedLanes := ?,
requestForRightOfWay := ?,
requestForFreeCrossingAtATrafficLight := ?,
noPassing := ?,
noPassingForTrucks := ?,
speedLimit := ?,
reserved := '000000000000000000'B
} // End of template mw_sspCAMContainer_dummy
template (present) ServiceSpecificPermissions mw_sspCAM_dummy := {
bitmapSsp := ?
} // End of template mw_sspCAM_dummy
} // End of group sspCamRecv
} // End of group sspCam
group sspDenm {
group sspDenmSend {
template (value) SspDENM m_sspDENMContainer_sign_all := {
trafficCondition := '1'B,
accident := '1'B,
roadworks := '1'B,
adverseWeatherCondition_Adhesion := '1'B,
hazardousLocation_SurfaceCondition := '1'B,
hazardousLocation_ObstacleOnTheRoad := '1'B,
hazardousLocation_AnimalOnTheRoad := '1'B,
humanPresenceOnTheRoad := '1'B,
wrongWayDriving := '1'B,
rescueAndRecoveryWorkInProgress := '1'B,
adverseWeatherCondition_ExtremeWeatherCondition := '1'B,
adverseWeatherCondition_Visibility := '1'B,
adverseWeatherCondition_Precipitation := '1'B,
slowVehicle := '1'B,
dangerousEndOfQueue := '1'B,
vehicleBreakdown := '1'B,
postCrash := '1'B,
humanProblem := '1'B,
stationaryVehicle := '1'B,
emergencyVehicleApproaching := '1'B,
hazardousLocation_DangerousCurve := '1'B,
collisionRisk := '1'B,
signalViolation := '1'B,
dangerousSituation := '1'B,
reserved := '00000000'B
} // End of template m_sspDENMContainer_sign_all
template (value) SspDENM m_sspDENMContainer_vehicle
modifies m_sspDENMContainer_sign_all:= {
trafficCondition := '0'B,
accident := '0'B,
roadworks := '0'B,
adverseWeatherCondition_Adhesion := '0'B,
hazardousLocation_SurfaceCondition := '0'B,
hazardousLocation_ObstacleOnTheRoad := '0'B,
hazardousLocation_AnimalOnTheRoad := '0'B,
slowVehicle := '0'B,
dangerousEndOfQueue := '0'B,
vehicleBreakdown := '0'B,
stationaryVehicle := '0'B
} // End of template m_sspDENMContainer_sign_all
template (value) SspDENM m_sspDENMContainer_roadSideUnit
modifies m_sspDENMContainer_sign_all:= {
trafficCondition := '0'B,
accident := '0'B,
roadworks := '0'B,
adverseWeatherCondition_Adhesion := '0'B,
hazardousLocation_SurfaceCondition := '0'B,
hazardousLocation_ObstacleOnTheRoad := '0'B,
hazardousLocation_AnimalOnTheRoad := '0'B,
humanPresenceOnTheRoad := '0'B,
wrongWayDriving := '0'B,
rescueAndRecoveryWorkInProgress := '0'B,
adverseWeatherCondition_ExtremeWeatherCondition := '0'B,
adverseWeatherCondition_Visibility := '0'B,
adverseWeatherCondition_Precipitation := '0'B,
postCrash := '0'B,
humanProblem := '0'B,
stationaryVehicle := '0'B,
hazardousLocation_DangerousCurve := '0'B,
collisionRisk := '0'B,
dangerousSituation := '0'B
} // End of template m_sspDENMContainer_roadSideUnit
template (value) ServiceSpecificPermissions m_sspDENM(
in template (value) BitmapSsp p_bitmapSsp
) := {
bitmapSsp := p_bitmapSsp
} // End of template m_sspDENM
} // End of group sspDenmSend
group sspDenmRecv {
template (present) SspDENM mw_sspDENMContainer_dummy := {
trafficCondition := ?,
accident := ?,
roadworks := ?,
adverseWeatherCondition_Adhesion := ?,
hazardousLocation_SurfaceCondition := ?,
hazardousLocation_ObstacleOnTheRoad := ?,
hazardousLocation_AnimalOnTheRoad := ?,
humanPresenceOnTheRoad := ?,
wrongWayDriving := ?,
rescueAndRecoveryWorkInProgress := ?,
adverseWeatherCondition_ExtremeWeatherCondition := ?,
adverseWeatherCondition_Visibility := ?,
adverseWeatherCondition_Precipitation := ?,
slowVehicle := ?,
dangerousEndOfQueue := ?,
vehicleBreakdown := ?,
postCrash := ?,
humanProblem := ?,
stationaryVehicle := ?,
emergencyVehicleApproaching := ?,
hazardousLocation_DangerousCurve := ?,
collisionRisk := ?,
signalViolation := ?,
dangerousSituation := ?,
reserved := '00000000'B
} // End of template mw_sspDENMContainer_dummy
template (present) SspDENM mw_sspDENMContainer_vehicle
modifies mw_sspDENMContainer_dummy := {
trafficCondition := '0'B,
accident := '0'B,
roadworks := '0'B,
adverseWeatherCondition_Adhesion := '0'B,
hazardousLocation_SurfaceCondition := '0'B,
hazardousLocation_ObstacleOnTheRoad := '0'B,
hazardousLocation_AnimalOnTheRoad := '0'B,
slowVehicle := '0'B,
dangerousEndOfQueue := '0'B,
vehicleBreakdown := '0'B,
stationaryVehicle := '0'B
} // End of template mw_sspDENMContainer_vehicle
template (present) SspDENM mw_sspDENMContainer_roadSideUnit
modifies mw_sspDENMContainer_dummy := {
trafficCondition := '0'B,
accident := '0'B,
roadworks := '0'B,
adverseWeatherCondition_Adhesion := '0'B,
hazardousLocation_SurfaceCondition := '0'B,
hazardousLocation_ObstacleOnTheRoad := '0'B,
hazardousLocation_AnimalOnTheRoad := '0'B,
humanPresenceOnTheRoad := '0'B,
wrongWayDriving := '0'B,
rescueAndRecoveryWorkInProgress := '0'B,
adverseWeatherCondition_ExtremeWeatherCondition := '0'B,
adverseWeatherCondition_Visibility := '0'B,
adverseWeatherCondition_Precipitation := '0'B,
postCrash := '0'B,
humanProblem := '0'B,
stationaryVehicle := '0'B,
hazardousLocation_DangerousCurve := '0'B,
collisionRisk := '0'B,
dangerousSituation := '0'B
} // End of template m_sspDENMContainer_roadSideUnit
} // End of group sspDenmRecv
} // End of group sspDenm
} // End of group ssp
group utPrimitives {
template (value) UtGnInitialize m_secGnInitialize(
in Oct8 p_hashedId8
) := {
hashedId8 := p_hashedId8
} // End of template m_secGnInitialize
} // End of group utPrimitives
} // End of module LibItsSecurity_Templates
/**
* @author ETSI / STF481 / STF507 / STF517
* @version $Url: https://oldforge.etsi.org/svn/LibIts/tags/20170222_STF527_Final/ttcn/Security/LibItsSecurity_TypesAndValues.ttcn3 $
* $Id: LibItsSecurity_TypesAndValues.ttcn3 1318 2017-01-26 10:20:53Z filatov $
* @desc Module containing types and values for Security Protocol
* @see Draft ETSI TS 103 097 V1.1.14
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*/
module LibItsSecurity_TypesAndValues {
// LibCommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibItsCommon
import from LibItsCommon_Pixits all;
// LibIts
import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
/**
* @desc Sequence of HashedId8
*/
type record of HashedId8 HashedId8s;
// Test Adapter certificates & private keys - Valid behavior
const charstring cc_taCert_A := PX_CERT_FOR_TS; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_A_AA := "CERT_TS_A_AA";
const charstring cc_taCert_A_EA := "CERT_TS_A_EA";
const charstring cc_taCert_A1 := "CERT_TS_A_A1_AT"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_A2 := "CERT_TS_A_A2_AT"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_A3 := "CERT_TS_A_A3_AT"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_B := "CERT_TS_B_AT"; /** Default certificate, with circular region, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_B1 := "CERT_TS_B_1_AT";
const charstring cc_taCert_B_AA := "CERT_TS_B_1_AA";
const charstring cc_taCert_A_B := "CERT_TS_A_B_AT";
const charstring cc_taCert_A_B3 := "CERT_TS_A_B3_AT";
const charstring cc_taCert_C := "CERT_TS_C_AT"; /** Certificate with a rectangular region, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_C1 := "CERT_TS_C1_AT"; /** Certificate with a rectangular region, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_CA1 := "CERT_TS_CA1_AT"; /** Certificate with a rectangular region, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_D := "CERT_TS_D_AT"; /** Certificate with a polygonal region, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_E := "CERT_TS_E_AT"; /** Certificate with a region identifier, to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_F := "CERT_TS_F_AT"; /** Certificate that can be used as an unknown certificate for IUT. */
const charstring cc_taCert_F3 := "CERT_TS_F3_AT"; /** Certificate that can be used as an unknown certificate for IUT with BrainpoolP384 curve. */
const charstring cc_taCert_G := "CERT_TS_G_AT"; /** to be defined */
const charstring cc_taCert_EC := "CERT_TS_A_EC"; /** Certificate with a subject type indicating 'enrolment_credentials', to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_AA := "CERT_TS_A_AA"; /** Certificate with a subject type indicating 'authorisation_authority', to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_EA := "CERT_TS_A_EA"; /** Certificate with a subject type indicating 'enrolment_authority', to be used when secured messages are sent from TA to IUT */
const charstring cc_taCert_CA := "CERT_TS_A_CA"; /** Certificate with a subject type indicating 'root_ca', to be used when secured messages are sent from TA to IUT */
// Test Adapter certificates & private keys - Inoportune behavior
const charstring cc_taCert_B_BO := "CERT_TS_B_BO_AT"; /** Certificate with a circular region, the IUT position is outside of the region */
const charstring cc_taCert_C_BO := "CERT_TS_C_BO_AT"; /** Certificate with a rectangular region, the IUT position is outside of the region */
const charstring cc_taCert_D_BO := "CERT_TS_D_BO_AT"; /** Certificate with a polygonal region, the IUT position is outside of the region */
const charstring cc_taCert_E_BO := "CERT_TS_E_BO_AT"; /** Certificate with a region identifier, the IUT position is outside of the region */
const charstring cc_taCert0101_BO := "CERT_TS_01_01_BO_AT"; /** Check that IUT discards the AT certificate with version 3 */
const charstring cc_taCert0102_BO := "CERT_TS_01_02_BO_AT"; /** Check that IUT discards the AT certificate with version 1 */
const charstring cc_taCert0103_BO := "CERT_TS_01_03_BO_AT"; /** Check that IUT discards the AA certificate with version 3 */
const charstring cc_taCert0104_BO := "CERT_TS_01_04_BO_AT"; /** Check that IUT discards the AA certificate with version 1 */
const charstring cc_taCert0201_BO := "CERT_TS_02_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the authorization ticket certificate contains the subject type 'enrolment_credential' */
const charstring cc_taCert0202_BO := "CERT_TS_02_02_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the authorization authority certificate contains the subject type 'enrolment_credential' */
const charstring cc_taCert0203_BO := "CERT_TS_02_03_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the authorization ticket certificate contains the subject type 'enrolment_authority' */
const charstring cc_taCert0204_BO := "CERT_TS_02_04_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the authorization authority certificate contains the subject type 'enrolment_authority' */
const charstring cc_taCert0301_BO := "CERT_TS_03_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the authorization ticket certificate contains the subject type 'authorization_ticket' */
const charstring cc_taCert0302_BO := "CERT_TS_03_02_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the authorization authority certificate contains the subject type 'authorization_ticket' */
const charstring cc_taCert0601_BO := "CERT_TS_06_01_BO_AT"; /** Check that IUT discards a SecuredMessage containing generation_time before the message signing certificate validity period */
const charstring cc_taCert0602_BO := "CERT_TS_06_02_BO_AT"; /** Check that IUT discards a SecuredMessage containing generation_time after the message signing certificate validity period */
const charstring cc_taCert0401_BO := "CERT_TS_04_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the issuer certificate of the AA certificate contains the subject type 'authorization_authority' */
const charstring cc_taCertMsg1301_BO := "CERT_TS_MSG_13_01_BO_AT"; /** Check that IUT discards secured CAM signed with the not yet valid certificate */
const charstring cc_taCertMsg1302_BO := "CERT_TS_MSG_13_02_BO_AT"; /** Check that IUT discards secured CAM signed with the expired certificate */
const charstring cc_taCertMsg1303_BO := "CERT_TS_MSG_13_03_BO_AT"; /** Check that IUT discards secured CAM when IUT location is outside the circular validity restriction of the signing certificatee */
const charstring cc_taCertMsg1304_BO := "CERT_TS_MSG_13_04_BO_AT"; /** Check that IUT discards secured CAM when IUT location is outside the rectangular validity restriction of the signing certificate */
const charstring cc_taCertMsg1305_BO := "CERT_TS_MSG_13_05_BO_AT"; /** Check that IUT discards secured CAM when IUT location is outside the polygonal validity restriction of the signing certificate */
const charstring cc_taCertMsg1306_BO := "CERT_TS_MSG_13_06_BO_AT"; /** Check that IUT discards secured CAM when IUT location is outside the identified validity restriction of the signing certificate */
const charstring cc_taCert0601_BV := "CERT_TS_06_01_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the same circular region validity restriction as its issuing certificate */
const charstring cc_taCert0602_BV := "CERT_TS_06_02_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the circular region validity restriction which is fully inside in the circular region validity restriction of its issuing certificate */
const charstring cc_taCert0603_BV := "CERT_TS_06_03_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the circular region validity restriction which is fully inside in the rectangular region validity restriction of its issuing certificate */
const charstring cc_taCert0604_BV := "CERT_TS_06_04_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the circular region validity restriction which is fully inside in the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0605_BV := "CERT_TS_06_05_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the circular region validity restriction which is fully inside in the identified region validity restriction of its issuing certificate */
const charstring cc_taCert0606_BO := "CERT_TS_06_06_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message does not contain the region validity restriction but its issuing certificate contains the circular region validity restriction */
const charstring cc_taCert0607_BO := "CERT_TS_06_07_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains circular region validity restriction which is outside of the circular region validity restriction of its issuing certificate */
const charstring cc_taCert0608_BO := "CERT_TS_06_08_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains circular region validity restriction which is not fully covered by the the circular region validity restriction of its issuing certificate */
const charstring cc_taCert0701_BV := "CERT_TS_07_01_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the same rectangular region validity restriction as its issuing certificate */
const charstring cc_taCert0702_BV := "CERT_TS_07_02_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the rectangular region validity restriction which is fully inside in the circular region validity restriction of its issuing certificate */
const charstring cc_taCert0703_BV := "CERT_TS_07_03_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the validity restriction with rectangular region which is fully inside in the rectangular region validity restriction of its issuing certificate */
const charstring cc_taCert0704_BV := "CERT_TS_07_04_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the rectangular region validity restriction which is fully inside in the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0705_BV := "CERT_TS_07_05_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the rectangular region validity restriction which is fully inside in the identified region validity restriction of its issuing certificate */
const charstring cc_taCert0706_BO := "CERT_TS_07_06_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message does not contain the region validity restriction but its issuing certificate contains the rectangular region validity restriction */
const charstring cc_taCert0707_BO := "CERT_TS_07_07_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains rectangular region validity restriction which is outside of the rectangular region validity restriction of its issuing certificate */
const charstring cc_taCert0708_BO := "CERT_TS_07_08_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains rectangular region validity restriction which is not fully covered by the the rectangular region validity restriction of its issuing certificate */
const charstring cc_taCert0801_BV := "CERT_TS_08_01_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the same polygonal region validity restriction as its issuing certificate */
const charstring cc_taCert0802_BV := "CERT_TS_08_02_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the circular region validity restriction of its issuing certificate */
const charstring cc_taCert0803_BV := "CERT_TS_08_03_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the rectangular region validity restriction of its issuing certificate */
const charstring cc_taCert0804_BV := "CERT_TS_08_04_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0805_BV := "CERT_TS_08_05_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the identified region validity restriction of its issuing certificate */
const charstring cc_taCert0806_BO := "CERT_TS_08_06_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message does not contain the region validity restriction but its issuing certificate contains the polygonal region validity restriction */
const charstring cc_taCert0807_BO := "CERT_TS_08_07_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains polygonal region validity restriction which is outside of the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0808_BO := "CERT_TS_08_08_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains polygonal region validity restriction which is outside of the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0809_BO := "CERT_TS_08_09_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message contains polygonal region validity restriction which is not fully covered by the the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0901_BV := "CERT_TS_09_01_BV_AT"; /** Check that the IUT accepts a message when its signing certificate contains the identified region validity restriction with the same identified region as the issuing certificate and without local area definition */
const charstring cc_taCert0902_BV := "CERT_TS_09_02_BV_AT"; /** Check that the IUT accepts a message when its signing certificate contains the identified region validity restriction with the same identified region as the issuing certificate and with local area definition */
const charstring cc_taCert0903_BV := "CERT_TS_09_03_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the circular region validity restriction of its issuing certificate */
const charstring cc_taCert0904_BV := "CERT_TS_09_04_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the rectangular region validity restriction of its issuing certificate */
const charstring cc_taCert0905_BV := "CERT_TS_09_05_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of this message contains the polygonal region validity restriction which is fully inside in the polygonal region validity restriction of its issuing certificate */
const charstring cc_taCert0906_BV := "CERT_TS_09_06_BV_AT"; /** Check that the IUT accepts a message when the signing certificate of the message contains the identified region validity restriction with the identified region which is fully covered by the identified region of the validity restriction of its issuing certificate */
const charstring cc_taCert0907_BO := "CERT_TS_09_07_BO_AT"; /** Check that the IUT discards a message when the signing certificate of this message does not contain the region validity restriction but its issuing certificate contains the identified region validity restriction */
const charstring cc_taCert0908_BO := "CERT_TS_09_08_BO_AT"; /** Check that the IUT discards a message when the signing certificate and its issuing certificate are both containing the identified region validity restrictions with the same region id but different local regions */
const charstring cc_taCert0909_BO := "CERT_TS_09_09_BO_AT"; /** Check that the IUT discards a message when the identified region of the validity restriction of its signing certificate is different and not fully covered by the one in the issuing certificate */
const charstring cc_taCert0910_BO := "CERT_TS_09_10_BO_AT"; /** Check that the IUT discards a message when the identified region validity restriction of its signing certificate contains unknown area code */
const charstring cc_taCert0911_BO := "CERT_TS_09_11_BO_AT"; /** Check that the IUT discards a message when the identified region validity restriction of its signing certificate contains invalid area code */
const charstring cc_taCert1001_BO := "CERT_TS_10_01_BO_AT"; /** Check that the IUT discards a message when its signing certificate does not contain the time validity restriction */
const charstring cc_taCert1002_BO := "CERT_TS_10_02_BO_AT"; /** Check that the IUT discards a message when the issuing certificate of the message signing certificate does not contain the time validity restriction */
const charstring cc_taCert1003_BO := "CERT_TS_10_03_BO_AT"; /** Check that the IUT discards a message when its signing certificate contains 'time_end' validity restriction */
const charstring cc_taCert1004_BO := "CERT_TS_10_03_BO_AT"; /** Check that the IUT discards a message when its signing certificate contains 'time_start_and_duration' validity restriction */
const charstring cc_taCert1005_BO := "CERT_TS_10_03_BO_AT"; /** Check that the IUT discards a message when the issuing certificate of the message signing certificate contains 'time_end' validity restriction */
const charstring cc_taCert1006_BO := "CERT_TS_10_03_BO_AT"; /** Check that the IUT discards a message when its signing certificate contains 'time_start_and_duration' validity restriction */
const charstring cc_taCert1101_BO := "CERT_TS_11_01_BO_AT"; /** Check that the IUT discards a message when the validity period of the signing certificate ends after the validity period of its issuing certificate */
const charstring cc_taCert1102_BO := "CERT_TS_11_02_BO_AT"; /** Check that the IUT discards a message when the validity period of its signing certificate starts before the validity period of the issuing certificate */
const charstring cc_taCert1103_BO := "CERT_TS_11_03_BO_AT"; /** Check that the IUT discards a message when the issuing certificate of signing certificate is expired but the signing certificate is not expired yet */
const charstring cc_taCert1104_BO := "CERT_TS_11_04_BO_AT"; /** Check that the IUT discards a message when the validity period of the signing certificate is after the validity period of its issuing certificate */
const charstring cc_taCert1201_BO := "CERT_TS_12_01_BO_AT"; /** Check that the IUT discards a message when its signing certificate does not contain the SSP-AID subject attribute */
const charstring cc_taCert1202_BO := "CERT_TS_12_02_BO_AT"; /** Check that the IUT discards a Secured CAM when its signing certificate does not contain a record with AID_CAM in the its_aid_ssp_list subject attribute */
const charstring cc_taCert1203_BO := "CERT_TS_12_03_BO_AT"; /** Check that the IUT discards a Secured DENM when its signing certificate does not contain a record with AID_DENM in the its_aid_ssp_list subject attribute */
const charstring cc_taCert1204_BO := "CERT_TS_12_04_BO_AT"; /** Check that the IUT discards a Secured CAM when its signing certificate contains two records with AID_CAM in the its_aid_ssp_list subject attribute */
const charstring cc_taCert1301_BO := "CERT_TS_13_01_BO_AT"; /** Check that the IUT discards a message when the signing AT certificate contains a CAM AID-SSP record whereas the issuing AA certificate does not contain the record with AID_CAM */
const charstring cc_taCert1302_BO := "CERT_TS_13_02_BO_AT"; /** Check that the IUT discards a message when the signing AT certificate contains a DENM AID-SSP record whereas the issuing AA certificate does not contain the AID record with AID_DENM */
const charstring cc_taCert1303_BO := "CERT_TS_13_03_BO_AT"; /** Check that IUT discards a SecuredMessage if the AA certificate does not contain a subject_attribute of type its_aid_list */
const charstring cc_taCert1401_BO := "CERT_TS_14_01_BO_AT"; /** Check that IUT discards the AT certificate with signer info of type 'certificate' */
const charstring cc_taCert1402_BO := "CERT_TS_14_02_BO_AT"; /** Check that IUT discards the AT certificate with signer info of type 'certificate_chain' */
const charstring cc_taCert1403_BO := "CERT_TS_14_03_BO_AT"; /** Check that IUT discards the AT certificate with signer info of type 'certificate_digest_with_other_algorithm' */
const charstring cc_taCert1501_BO := "CERT_TS_15_01_BO_AT"; /** Check that IUT discards the AA certificate with signer info of type 'certificate' */
const charstring cc_taCert1502_BO := "CERT_TS_15_02_BO_AT"; /** Check that IUT discards the AA certificate with signer info of type 'certificate_chain' */
const charstring cc_taCert1503_BO := "CERT_TS_15_03_BO_AT"; /** Check that IUT discards the AA certificate with signer info of type 'certificate_digest_with_other_algorithm' */
const charstring cc_taCert1601_BO := "CERT_TS_16_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the subject_name of the AT certificate is not an empty name field */
const charstring cc_taCert1701_BO := "CERT_TS_17_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the subject attribute of type assurance_level is missing in the AT certificate */
const charstring cc_taCert1702_BO := "CERT_TS_17_02_BO_AT"; /** Check that IUT discards a SecuredMessage if the subject attribute of type assurance_level is missing in the AA certificate */
const charstring cc_taCert1703_BO := "CERT_TS_17_03_BO_AT"; /** Check that IUT discards a SecuredMessage if the assurance level of issuing certificate is less then assurance level of subordinate certificate */
const charstring cc_taCert1704_BO := "CERT_TS_17_04_BO_AT"; /** Check that IUT discards a SecuredMessage if the assurance level of issuing certificate is equal to the assurance level of the subordinate certificate but the confidence of subject assurance of issuing certificate is less then the confidence of the subordinate certificate */
const charstring cc_taCert1801_BO := "CERT_TS_18_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the subject attribute of type verification_key is missing in the AT certificate */
const charstring cc_taCert1802_BO := "CERT_TS_18_02_BO_AT"; /** Check that IUT discards a SecuredMessage if the subject attribute of type verification_key is missing in the AA certificate */
const charstring cc_taCert1901_BO := "CERT_TS_19_01_BO_AT"; /** Check that IUT discards a SecuredMessage if the reserved region type has been used in region validity restriction of the AT certificate */
// IUT certificates & private keys
const charstring cc_iutCert_C1 := "CERT_IUT_C1_AT";
const charstring cc_iutCert_CA1 := "CERT_IUT_CA1_AT";
const charstring cc_iutCert_CA2 := "CERT_IUT_CA2_AT";
const charstring cc_iutCert_C3 := "CERT_IUT_C3_AA";
const charstring cc_iutCert_CA3 := "CERT_IUT_CA3_AT";
const charstring cc_iutCert_CA_AA := "CERT_IUT_CA_AA";
const charstring cc_iutCert_CC_AA := "CERT_IUT_CC_AA";
const charstring cc_iutCert_A := "CERT_IUT_A_AT"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT */
const charstring cc_iutCert_A1 := "CERT_IUT_A1_AT";
const charstring cc_iutCert_A2 := "CERT_IUT_A2_AT";
const charstring cc_iutCert_A3 := "CERT_IUT_A3_AT";
const charstring cc_iutCert_A4 := "CERT_IUT_A4_AT";
const charstring cc_iutCert_A_AA := "CERT_IUT_A_AA"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT - NistP256*/
const charstring cc_iutCert_A_N := "CERT_IUT_A_N_AT";
const charstring cc_iutCert_A_B_N := "CERT_IUT_A_B_N_AT";
const charstring cc_iutCert_A_B := "CERT_IUT_A_B_AT"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT - BrainpoolP256r1*/
const charstring cc_iutCert_A_B3 := "CERT_IUT_A_B3_AT"; /** Default certificate, without region validity restriction, to be used when secured messages are sent from TA to IUT - BrainpoolP384r1*/
const charstring cc_iutCert_A_B3_N := "CERT_IUT_A_B3_N_AT";
const charstring cc_iutCert_B := "CERT_IUT_B_AT"; /** Default certificate, with circular region, to be used when secured messages are sent from TA to IUT */
const charstring cc_iutCert_C := "CERT_IUT_C_AT"; /** Certificate with a rectangular region, to be used when secured messages are sent from TA to IUT */
const charstring cc_iutCert_D := "CERT_IUT_D_AT"; /** Certificate with a polygonal region, to be used when secured messages are sent from TA to IUT */
const charstring cc_iutCert_E := "CERT_IUT_E_AT"; /** Certificate with a region identifier, to be used when secured messages are sent from TA to IUT */
const charstring cc_iutCert_F := "CERT_IUT_F_AT"; /** Certificate with a subject type indicating 'enrolment_credentials', to be used when secured messages are sent from TA to IUT */
/**
* @desc Specification of basic format elements
* @see Draft ETSI TS 103 097 V1.1.14 Clause 4.2
*/
group basicFormatElements {
/**
* @desc Service specific permissions definition for CAM
* @see ETSI EN 302 637-2 V1.3.2 (2014-11) Clause 6.2.2.2 Service Specific Permissions (SSP)
*/
type record SspCAM {
Bit1 cenDsrcTollingZone,
Bit1 publicTransport,
Bit1 specialTransport,
Bit1 dangerousGoods,
Bit1 roadwork,
Bit1 rescue,
Bit1 emergency,
Bit1 safetyCar,
Bit1 closedLanes,
Bit1 requestForRightOfWay,
Bit1 requestForFreeCrossingAtATrafficLight,
Bit1 noPassing,
Bit1 noPassingForTrucks,
Bit1 speedLimit,
Bit18 reserved
} // End of type SspCAM
/**
* @desc Service specific permissions definition for DENM
* @member trafficCondition
* @member accident
* @member roadworks
* @member adverseWeatherCondition_Adhesion
* @member hazardousLocation_SurfaceCondition
* @member hazardousLocation_ObstacleOnTheRoad
* @member hazardousLocation_AnimalOnTheRoad
* @member humanPresenceOnTheRoad
* @member wrongWayDriving
* @member rescueAndRecoveryWorkInProgress
* @member adverseWeatherCondition_ExtremeWeatherCondition
* @member adverseWeatherCondition_Visibility
* @member adverseWeatherCondition_Precipitation
* @member slowVehicle
* @member dangerousEndOfQueue
* @member vehicleBreakdown
* @member postCrash
* @member humanProblem
* @member stationaryVehicle
* @member emergencyVehicleApproaching
* @member hazardousLocation_DangerousCurve
* @member collisionRisk
* @member signalViolation
* @member dangerousSituation
* @member reserved Reserved for Future Usage
* @see Draft ETSI EN 302 637-3 V1.2.10 Clause 6.2.2.2 Service Specific Permissions (SSP)
*/
type record SspDENM {
Bit1 trafficCondition,
Bit1 accident,
Bit1 roadworks,
Bit1 adverseWeatherCondition_Adhesion,
Bit1 hazardousLocation_SurfaceCondition,
Bit1 hazardousLocation_ObstacleOnTheRoad,
Bit1 hazardousLocation_AnimalOnTheRoad,
Bit1 humanPresenceOnTheRoad,
Bit1 wrongWayDriving,
Bit1 rescueAndRecoveryWorkInProgress,
Bit1 adverseWeatherCondition_ExtremeWeatherCondition,
Bit1 adverseWeatherCondition_Visibility,
Bit1 adverseWeatherCondition_Precipitation,
Bit1 slowVehicle,
Bit1 dangerousEndOfQueue,
Bit1 vehicleBreakdown,
Bit1 postCrash,
Bit1 humanProblem,
Bit1 stationaryVehicle,
Bit1 emergencyVehicleApproaching,
Bit1 hazardousLocation_DangerousCurve,
Bit1 collisionRisk,
Bit1 signalViolation,
Bit1 dangerousSituation,
Bit8 reserved
} // End of type SspDENM
} // End of group certificateSpecification
/**
* @desc Send/receive templates for profiles for certificates
* @see Draft ETSI TS 103 097 V1.1.14 Clause 7.4 Profiles for certificate
*/
group profileCertificates {
type record CertificatesCachingItem {
HashedId8 hashedId8,
EtsiTs103097Certificate certificate
}
type record of CertificatesCachingItem CertificatesCaching;
} // End of group profileCertificates
type enumerated SignAlgorithm {
e_nistp_256,
e_brainpool_256,
e_brainpool_384
}
group taConfiguration {
/**
* @desc Describes the Test Adapter security configuration
* @member signingPrivateKey Signing private keys generated by the PKI Infrastructire tool (CertChainGenerator\src\org\etsi\stf440\pki\MainApp.java)
* @member encryptPrivateKey Encryption private keys generated by the PKI Infrastructire tool (CertChainGenerator\src\org\etsi\stf440\pki\MainApp.java)
* @member caCertificate Certificates Authorization certificate generated by the PKI Infrastructire tool
* @member aaCertificate Enrolment Credential certificate generated by the PKI Infrastructire tool
* @member atCertificate Authorization Tickate certificate generated by the PKI Infrastructire tool
* @member location 3D location associated to each configuration
*/
/*type record TaConfig {
Oct32 signingPrivateKey,
Oct32 encryptPrivateKey,
EtsiTs103097Certificate caCertificate,
EtsiTs103097Certificate aaCertificate,
EtsiTs103097Certificate atCertificate,
ThreeDLocation location
}*/ // End of type TaConfig
/**
* @desc Describes the Test Adapter security configurations
*/
//type set of TaConfig TaConfigs;
} // End of group taConfiguration
group utPrimitives {
}
with {
encode "UpperTester"
} // End of group utPrimitives
} with {
encode "LibItsSecurity"
} // End of module LibItsSecurity_TypesAndValues
Subproject commit c4d138571dcbca3e83970256b4780b566fcb4580
sources := \
LibItsSecurity_EncdecDeclarations.ttcn \
LibItsSecurity_Pics.ttcn \
LibItsSecurity_Pixits.ttcn \
LibItsSecurity_Templates.ttcn \
LibItsSecurity_TypesAndValues.ttcn \
asn1/EtsiTs103097ExtensionModule.asn \
asn1/EtsiTs103097Module.asn \
asn1/ieee1609dot2/Ieee1609Dot2.asn \
asn1/ieee1609dot2/Ieee1609Dot2BaseTypes.asn \
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* @author ETSI / STF481 / STF507 / STF517 / STF538
* @version $Url: https://oldforge.etsi.org/svn/LibIts/tags/20170222_STF527_Final/ttcn/Security/LibItsSecurity_TestSystem.ttcn3 $
* $Id: LibItsSecurity_TestSystem.ttcn3 1318 2017-01-26 10:20:53Z filatov $
* @desc Test System module for Security Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module LibItsSecurity_TestSystem {
// LibCommon
import from LibCommon_DataStrings all;
// LibIts
import from Ieee1609Dot2BaseTypes language "ASN.1:1997" all;
import from Ieee1609Dot2 language "ASN.1:1997" all;
import from EtsiTs103097Module language "ASN.1:1997" all;
// LibItsSecurity
import from LibItsSecurity_TypesAndValues all;
import from LibItsSecurity_Pixits all;
group componentDefinitions {
/**
* @desc ITS Security Component
*/
type component ItsSecurityBaseComponent {
// Certificates
var Certificate vc_aaCertificate; /** Test Adapter AA certificate */
var Certificate vc_atCertificate; /** Test Adapter AT certificate */
var Certificate vc_lastAtCertificateUsed; /** Last Test Adapter certificate used in 'f_buildGnSecuredXXX' functions */
var charstring vc_hashedId8ToBeUsed := PX_IUT_DEFAULT_CERTIFICATE; /** Digest value of the AT certificate to be used by the IUT. Default: CERT_IUT_A_AT */
// Private keys
var octetstring vc_signingPrivateKey;
var octetstring vc_encryptPrivateKey;
// Generation position. See Draft ETSI TS 103 097 V1.1.14 Clause 7.2 Security profiles for DENMs
var ThreeDLocation vc_location;
} // End of ItsSecurityBaseComponent
} // End of group componentDefinitions
} // End of module LibItsSecurity_TestSystem
\ No newline at end of file
sources := \
LibItsSecurity_Functions.ttcn \
LibItsSecurity_TestSystem.ttcn \
suite := AtsSecurity
sources := ItsSecurity_Functions.ttcn \
ItsSecurity_Templates.ttcn \
ItsSecurity_TestCases.ttcn \
ItsSecurity_TestControl.ttcn \
ItsSecurity_TestSystem.ttcn
modules := lib \
lib_system \
../LibCommon \
../LibIts \
../AtsCAM/lib \
../AtsCAM/lib_system \
../AtsDENM/lib \
../AtsDENM/lib_system \
../AtsGeoNetworking/lib \
../AtsGeoNetworking/lib_system \
../AtsIPv6OverGeoNetworking/lib \
../AtsIPv6OverGeoNetworking/lib_system \
../AtsBTP/lib \
../AtsBTP/lib_system \
/ccsrc/Ports/LibIts_ports \
/ccsrc/Ports/LibIts_ports/CAM_ports \
/ccsrc/Ports/LibIts_ports/DENM_ports \
/ccsrc/Ports/LibIts_ports/GN_ports \
/ccsrc/Ports/LibIts_ports/IPv6oGN_ports \
/ccsrc/Ports/LibIts_ports/BTP_ports \
/ccsrc/EncDec \
/ccsrc/Framework \
/ccsrc/Externals \
/ccsrc/geospacial \
/ccsrc/loggers \
/ccsrc/Asn1c \
/ccsrc/Protocols/CAM \
/ccsrc/Protocols/DENM \
/ccsrc/Protocols/GeoNetworking \
/ccsrc/Protocols/BTP \
/ccsrc/Protocols/Pcap \
/ccsrc/Protocols/ETH \
/ccsrc/Protocols/UpperTester \
/ccsrc/Protocols/Security \
# ../AtsIS/lib \
# ../../ccsrc/Protocols/Http \
# ../../ccsrc/Protocols/IVIM \
# ../../ccsrc/Protocols/MapemSpatem \
# ../../ccsrc/Protocols/SremSsem \