Files
MicrOBU/microbu-esp32c5/external/vanetza-idf/docs/idf/evidence/security-host-05/analysis.md
T
Ashin Walpola 0e9525162d Keep the colleague's microbu-esp32c5 tree in this repository
obu-firmware builds against vanetza-idf from microbu-esp32c5/external, but
that tree was gitignored, so a clone of this repository could not build the
firmware it ships. It is now committed here as ordinary files in its own
folder, microbu-esp32c5/: the colleague's commit cf4b99f plus the V2X2MAP
bridge's signature verification (--trust) used on the bench. Nothing is
fetched from or pushed to the colleague's repository; this repository and
its remotes carry everything. The folder's own .gitignore keeps build output,
downloaded components and private key material out, as it did there; the
committed file set is identical to that repository's tracked files.

The ESP32-C5 is still flashed from obu-firmware/, which only takes
vanetza-idf from microbu-esp32c5/, so the two stay separate folders.
FLASHING.md says how to take a newer version of the colleague's tree (copy
it over the folder, rebuild, test, commit).
2026-09-23 17:46:40 +02:00

3.0 KiB

security-host-05: AtsSecurity, receiving side

Campaign: ports/esp_idf/tests/etsi_security_receive.cfg (26 cases: the compiled TC_SEC_ITSS_RCV_* cases of the pinned suite minus those gated by PICS this SUT does not claim, i.e. implicit certificates and Brainpool), host SUT vidf_sut --security-pool ./certificates built with VIDF_SECURITY_VERIFY=ON, pool from vidf_test_pool (now also CERT_TS_B_AT, a ticket restricted to a 5 km circle around the SUT position, selected as PX_AT_CERTIFICATE). The test system signs in TTCN-3 with CERT_TS_A_AT/CERT_TS_B_AT; the adapter injects each secured GN PDU into the SUT and reports what the SUT passes up after SN-DECAP as UtGnEventInd (rawPayload = BTP header plus SDU). A BV case passes when the payload the test system sent is indicated upwards, a BO case when it is not.

Case Verdict Observed
TC_SEC_ITSS_RCV_MSG_01_BV, CAM_01..03_BV, CAM_04_BV_XX pass protocol version 3, certificate signer, digest signer after the certificate, x-only signature, region-restricted ticket with the SUT inside: UtGnEventInd seen
TC_SEC_ITSS_RCV_MSG_01_BO, MSG_02_BO pass protocol version 2 / 4: discarded (check_profile)
TC_SEC_ITSS_RCV_CAM_01..09_BO pass wrong psid, missing/extra header fields, invalid signature algorithm, signer self, bad signature: discarded, no UtGnEventInd
TC_SEC_ITSS_RCV_DENM_01..07_BO, DENM_09_BO pass as above for the DENM profile
TC_SEC_ITSS_RCV_DENM_01_BV, DENM_02_BV_XX error ATS defect, IUT-independent (below)

TC_SEC_ITSS_RCV_DENM_01_BV and TC_SEC_ITSS_RCV_DENM_02_BV_XX

Both testcases read NodeB's position in their variable declaration, before the configuration function has filled the position table:

var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Use NodeB
...
f_cf01Up();

f_getPosition returns an unbound LongPosVector from the still-empty vc_positionTable, and building the DENM's generationLocation from it raises "Dynamic test case error: Creating a template from an unbound integer value" (pinned ItsSecurity_TestCases.ttcn lines 9293 and 9401) before anything is sent to the IUT. The DENM BO cases do not use that variable and run normally. The current upstream head (forge.etsi.org/rep/ITS/ttcn/ats_sec_ts103096-3, master, TC_SEC_ITSS_RCV_DENM_01_BV at line 8608) has the same order. The verdicts are retained as recorded; the testcases were not modified. The receiving DENM profile itself (generationLocation present, certificate signer) is covered by the eight DENM BO cases and by the library's component test (test_verification, step 10).

What this campaign does not show

The 99 TC_SEC_ITSS_RCV_CERT_* and TC_SEC_ITSS_RCV_GENMSG_* cases are commented out in the pinned suite and therefore not compiled; the certificate chain rules they would exercise are covered by the library's component tests (forged ticket, unknown AA, expired ticket, permissions) only. Implicit certificates and Brainpool curves are outside the SUT's PICS.