obu-firmware builds against the vanetza-idf C-ITS library, which until now came from the colleague's microbu-esp32c5 tree beside the repository and was not tracked here, so a clone of this repository could not build the firmware it ships. The library alone is now part of obu-firmware, as obu-firmware/external/vanetza-idf: their external/vanetza-idf at commit cf4b99f, unchanged (9775 files; see its PROVENANCE.md). CMake takes it from there by default; -DVANETZA_IDF_DIR still points the build elsewhere. The rest of the colleague's tree (their own VAM firmware, PKI tooling, station-link Python tools, the V2X2MAP bridge) stays out of this repository and gitignored; nothing is pushed to their repository. NOTES.md, docs/06, TODO.md and the pcap verifier's usage line point at the new location.
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.