v1.9.0: CLK rate in RST events; v1.9.1: T=0 NULL is not an SW1
v1.9.0 -- CLK frequency in RST events:
- RST events (sub_type 0x10) append the measured CLK frequency when known:
[direction, level, flags, clk_hz_be32], flags bit 0 = rate present; the
3-byte form is kept when the rate is not yet measured. Value is
samplerate / _samples_per_clock from the existing 16-edge measurement (PPS
changes F/D, not the CLK rate). VCC events unchanged. Backward
compatible (old consumers read the first two bytes only); consumers can
compute data_rate = clk_hz x D / F from the ATR/PPS Fi/Di.
- Unit tests for the payload codec; README/README_RUS/AGENTS updated.
v1.9.1 -- T=0 NULL is not an SW1:
- The 'scan for SW1' loops accepted any 0x6X byte, including the NULL
procedure byte 0x60 (card busy), so 'NULL + real SW1' was mis-framed as
the status word: the phone traces' SELECT MF came out as ...3f00 6061 —
real SW1 0x61 eaten as SW2, real SW2 0x29 left on the wire and discarded
as a suspicious CLA (desync cascade).
- plausible_sw() now accepts 0x61-0x6F and 0x90-0x9F only, per
ISO 7816-3:2006 10.3.3 Table 11 ('6X' or '9X', EXCEPT '60'; ISO 7816-4
enforces '60' as an invalid SW1) and UICC_SPECS.md 1.8. All seven
SW1-detection sites use plausible_sw(); NULLs met while scanning are
logged as rate-limited wait extensions (_note_pre_sw) instead of
suspicious bytes.
- tools/vs_reader.py::_plausible_sw() mirrors the fix; regression vector
for the 00a40004023f006061 artifact.
Validation: 74/74 unit tests; baseline regenerated and IDENTICAL (the SW
fix is count-neutral -- only the SW bytes change); all 9 example pcaps
regenerated -- vs_reader OK, zero APDUs ending in 60 61, SELECT MF now
61 29 / 61 25.
This commit is contained in:
1 parent
e5a2b7c83b
commit
250c09c9b7
7 files changed
+236
-58
No files matched your search
+8
-1
@@ -86,7 +86,7 @@ GSMTAP pcap-файлы (включая PCAP, который этот декод
|
||||
| 0x01 | ATR | сырые байты ATR |
|
||||
| 0x02 | Запрос PPS | сырые байты запроса PPS |
|
||||
| 0x03 | Ответ PPS | сырые байты ответа PPS |
|
||||
| 0x10 | Событие RST (кастомное) | `[direction, level, 0x00]` |
|
||||
| 0x10 | Событие RST (кастомное) | `[direction, level, flags, clk_hz_be32]` — частота CLK добавляется, когда известна |
|
||||
| 0x11 | Событие VCC (кастомное) | `[direction, level, 0x00]` |
|
||||
|
||||
Семантика байтов полезной нагрузки:
|
||||
@@ -100,6 +100,13 @@ GSMTAP pcap-файлы (включая PCAP, который этот декод
|
||||
0x10/0x11 — кастомные расширения, не определённые в gsmtap.h из
|
||||
libosmocore.
|
||||
|
||||
События RST несут измеренную частоту CLK, когда она известна: тогда
|
||||
устанавливается бит 0 байта `flags`, а следом идёт частота как big-endian
|
||||
uint32 в герцах (полезная нагрузка 7 байт). Пока частота не измерена,
|
||||
нагрузка остаётся 3 байта, поэтому потребители, читающие только первые два
|
||||
байта, не затрагиваются. Вместе с F/D, согласованными в ATR/PPS, скорость
|
||||
передачи данных равна `clk_hz × D / F` бит/с.
|
||||
|
||||
Расширения заголовка: флаги вроде `GSMTAP_FLAG_BAD_FCS` пишутся в байт
|
||||
`res` заголовка, который официальный gsmtap.h помечает как зарезервированный
|
||||
(RFU). Это собственное расширение данного декодера (upstream simtrace2-sniff
|
||||
|
||||
Reference in new issue
Block a user