The audit's P2 items: - ODD_INS: add 0x73 MANAGE SECURE CHANNEL and 0x75 TRANSACT DATA (TS 102 221 Table 10.5); the tools/vs_reader.py mirror and the pinned test are updated. - 9E/9F are SW1: ISO 7816-3 10.3.3 Table 11 makes every 9X value SW1. Remove the fabricated "extended-length procedure byte" that consumed SW2 as a length and lost the status word. - T=1: EOF-guard every block read, bound the M-bit chain with T1_CHAIN_MAX, and drop the caller's duplicate chain loop -- it read the next block after every I-block (usually the peer's R-block) and merged the following I-block's INF into the packet. R/S blocks emit nothing; the (possibly chained) I-block INF is the APDU payload. - Parity: a packet containing a parity-error byte is emitted with GSMTAP_FLAG_BAD_FCS (the CHKSUM annotation was invisible downstream), with a log note when the exchange is otherwise clean. - EOF guards: handle_atr (TA/TB/TC/TD, historical, TCK), handle_pps (request/response fields incl. PPS1-3) and the T=1 block parser return cleanly on a truncated capture instead of raising on None. - Dead code: _edge_read was initialized True and never cleared, so the ATR-based T=0 procedure loop (58 lines) and the 1.5-ETU guard branch were unreachable. Remove the flag, both dead paths and the branch; dedent the live loop (behavior unchanged). - Samplerate scaling: _samples_for_us() replaces the hard-coded 16 MHz thresholds -- start-bit deglitch (0.125 us), min_high floor (0.25 us) and the ETU glitch floor (0.75 us). At 16 MHz the values are unchanged. Validation: 130/130 unit tests (13 new: 9E/9F SW1, parity BAD_FCS, T=1 I/R/S blocks + M chain + truncations + one-block-per-step, PPS truncations, truncated ATR TA, samplerate/ETU-floor vectors); the 10-trace suite is unchanged from v1.9.6 (identical APDU/CHKSUM/CONCAT/ BAD_FCS counts, RESULT: OK); compare_baseline.sh reports IDENTICAL. VERSION -> 1.9.7.
476 lines
24 KiB
Plaintext
476 lines
24 KiB
Plaintext
=== Baseline captured 2026-10-20T18:55:32+03:00 ===
|
|
|
|
=== test_8 ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('etu recovered (samples):', 1237)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 37
|
|
capture ATRs : 3
|
|
capture APDUs : 56
|
|
byte-exact matches (LCS) : 28
|
|
reader exchanges not in capture (pre-capture / dropped): 9
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 17
|
|
- valid exchanges (reader retries/dupes): 11
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== test_7 ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('etu recovered (samples):', 1236)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 37
|
|
capture ATRs : 8
|
|
capture APDUs : 65
|
|
byte-exact matches (LCS) : 37
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 17
|
|
- valid exchanges (reader retries/dupes): 11
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== xiaomi_phone_sample ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('etu recovered (samples):', 53)
|
|
(11674007, 'CHKSUM ERROR: ', 0, 'bits: ', [0, 0, 0, 1, 0, 0, 1, 1, 1, 1])
|
|
iso7816-1: CHKSUM ERROR bits=[0, 0, 0, 1, 0, 0, 1, 1, 1, 1]
|
|
CHKSUM ERROR count: 2
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 0
|
|
capture APDUs : 640
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 20
|
|
- valid exchanges (reader retries/dupes): 620
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== xiaomi_mi_a1_coldboot ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f96801fc78031e073fe2117574a3382033339001e')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 1
|
|
capture APDUs : 475
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 10
|
|
- valid exchanges (reader retries/dupes): 465
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== 4gmodem_coldboot ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f96801fc78031e073fe2117574a3382033339001e')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 1
|
|
capture APDUs : 327
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 9
|
|
- valid exchanges (reader retries/dupes): 318
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== alcor_reader_sample ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f96801fc78031e073fe2117574a3382033339001e')
|
|
(26904874, 'CHKSUM ERROR: ', 0, 'bits: ', [0, 1, 1, 1, 1, 1, 1, 1, 1, 1])
|
|
iso7816-1: CHKSUM ERROR bits=[0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f96801fc78031e073fe2117574a3382033339001e')
|
|
CHKSUM ERROR count: 2
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 2
|
|
capture APDUs : 48
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 36
|
|
- valid exchanges (reader retries/dupes): 12
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== samsung_A55_coldboot_new_cable ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 1
|
|
capture APDUs : 407
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 24
|
|
- valid exchanges (reader retries/dupes): 383
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== samsung_A55_coldboot_new_cable_sim2 ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f96801fc78031e073fe2117574a3382033339001e')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 1
|
|
capture APDUs : 395
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 24
|
|
- valid exchanges (reader retries/dupes): 371
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== samsung_S21p_coldboot_new_cable ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f95801fc78031e073fe21136364035b83079000f7')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 1
|
|
capture APDUs : 399
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 24
|
|
- valid exchanges (reader retries/dupes): 375
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== samsung_S21p_coldboot_new_cable_sim2 ===
|
|
('=== iso7816 decoder v1.9.7 ===',)
|
|
('RST low at start: expecting cold-boot ATR',)
|
|
iso7816-1: RST deasserted
|
|
('RST deasserted',)
|
|
('RST deasserted (hunt/ATR already in progress)',)
|
|
('ENDATR', b'3b9f96801fc78031e073fe2117574a3382033339001e')
|
|
CHKSUM ERROR count: 0
|
|
CONCAT APDU count: 0
|
|
reader exchanges : 0
|
|
capture ATRs : 1
|
|
capture APDUs : 375
|
|
byte-exact matches (LCS) : 0
|
|
reader exchanges not in capture (pre-capture / dropped): 0
|
|
capture APDUs not in reader log:
|
|
- proactive/CAT (unlogged by reader SDK): 21
|
|
- valid exchanges (reader retries/dupes): 354
|
|
- GARBAGE (mis-framed/desync): 0
|
|
|
|
Degradation metrics:
|
|
- BAD_FCS (desynced by decoder): 0
|
|
- CONCAT (multi-exchange swallowed in one packet): 0
|
|
- payload mismatches (LCS-matched, bytes differ): 0
|
|
- suspicious CLA: 0
|
|
|
|
RESULT: OK - capture fully explained (reader + CAT + valid retries)
|
|
|
|
=== signal diagnostics ===
|
|
--- test_8 ---
|
|
First activity: sample 1
|
|
Frequency: 5.33 MHz
|
|
Period: 3.0 samples
|
|
Rising edges: 71858170
|
|
Transitions: 6
|
|
Transitions: 168
|
|
Transitions: 7423
|
|
--- test_7 ---
|
|
First activity: sample 2
|
|
Frequency: 5.33 MHz
|
|
Period: 3.0 samples
|
|
Rising edges: 71428947
|
|
Transitions: 16
|
|
Transitions: 444
|
|
Transitions: 8998
|
|
--- xiaomi_phone_sample ---
|
|
First activity: sample 11497325
|
|
Frequency: 5.33 MHz
|
|
Period: 3.0 samples
|
|
Rising edges: 12833950
|
|
Transitions: 0
|
|
Transitions: 78488
|
|
--- samsung_A55_coldboot_new_cable ---
|
|
First activity: sample 46045778
|
|
Frequency: 4.00 MHz
|
|
Period: 4.0 samples
|
|
Rising edges: 29683152
|
|
Transitions: 1
|
|
Transitions: 1
|
|
Transitions: 46003
|
|
--- samsung_S21p_coldboot_new_cable ---
|
|
First activity: sample 44024869
|
|
Frequency: 4.00 MHz
|
|
Period: 4.0 samples
|
|
Rising edges: 30172749
|
|
Transitions: 1
|
|
Transitions: 3
|
|
Transitions: 47161
|
|
=== unit tests ===
|
|
test_advancing_is_not_eof (__main__.TestAtEof.test_advancing_is_not_eof) ... ok
|
|
test_explicit_eof_wins (__main__.TestAtEof.test_explicit_eof_wins) ... ok
|
|
test_pending_replay_is_bounded (__main__.TestAtEof.test_pending_replay_is_bounded) ... ok
|
|
test_pending_replay_is_not_eof (__main__.TestAtEof.test_pending_replay_is_not_eof) ... ok
|
|
test_stuck_with_nothing_queued_is_eof (__main__.TestAtEof.test_stuck_with_nothing_queued_is_eof) ... ok
|
|
test_atr_with_parity_error_is_ignored (__main__.TestAtrHuntDetect.test_atr_with_parity_error_is_ignored) ... ok
|
|
test_bare_ts_t0_is_not_committed_as_an_atr (__main__.TestAtrHuntDetect.test_bare_ts_t0_is_not_committed_as_an_atr) ... ok
|
|
test_eof_after_plausible_cla_is_clean (__main__.TestAtrHuntDetect.test_eof_after_plausible_cla_is_clean) ... ok
|
|
test_handoff_on_extended_channel_cla (__main__.TestAtrHuntDetect.test_handoff_on_extended_channel_cla) ... ok
|
|
test_handoff_on_odd_ins_89 (__main__.TestAtrHuntDetect.test_handoff_on_odd_ins_89) ... ok
|
|
test_inverse_ts_pattern_is_parsed (__main__.TestAtrHuntDetect.test_inverse_ts_pattern_is_parsed) ... ok
|
|
test_no_handoff_on_basic_channel_cla (__main__.TestAtrHuntDetect.test_no_handoff_on_basic_channel_cla) ... ok
|
|
test_no_handoff_on_invalid_ins (__main__.TestAtrHuntDetect.test_no_handoff_on_invalid_ins) ... ok
|
|
test_truncated_atr_ta_is_clean (__main__.TestAtrHuntDetect.test_truncated_atr_ta_is_clean) ... ok
|
|
test_all_ff_idle_loop_is_bounded (__main__.TestAtrHuntEscape.test_all_ff_idle_loop_is_bounded) ... ok
|
|
test_idle_ff_retries_before_cap (__main__.TestAtrHuntEscape.test_idle_ff_retries_before_cap) ... ok
|
|
test_idle_resets_capped_then_resume (__main__.TestAtrHuntEscape.test_idle_resets_capped_then_resume) ... ok
|
|
test_measured_etu_skips_recovery (__main__.TestAtrHuntEscape.test_measured_etu_skips_recovery) ... ok
|
|
test_no_recovery_when_etu_known (__main__.TestAtrHuntEscape.test_no_recovery_when_etu_known) ... ok
|
|
test_non_ff_resumes_when_count_high (__main__.TestAtrHuntEscape.test_non_ff_resumes_when_count_high) ... ok
|
|
test_recover_etu_in_hunt_runs_measurement (__main__.TestAtrHuntEscape.test_recover_etu_in_hunt_runs_measurement) ... ok
|
|
test_recovery_attempts_capped_then_hard_limit (__main__.TestAtrHuntEscape.test_recovery_attempts_capped_then_hard_limit) ... ok
|
|
test_retry_then_recover_after_two_failures (__main__.TestAtrHuntEscape.test_retry_then_recover_after_two_failures) ... ok
|
|
test_seeded_bit_samples_does_not_block_recovery (__main__.TestAtrHuntEscape.test_seeded_bit_samples_does_not_block_recovery) ... ok
|
|
test_9e_9f_are_status_words (__main__.TestDecodeStep.test_9e_9f_are_status_words) ... ok
|
|
test_bit_dense_valid_cla_is_not_idle_noise (__main__.TestDecodeStep.test_bit_dense_valid_cla_is_not_idle_noise) ... ok
|
|
test_data_0x3b_before_traffic_is_atr_candidate (__main__.TestDecodeStep.test_data_0x3b_before_traffic_is_atr_candidate) ... ok
|
|
test_data_0x3b_is_not_an_atr_after_traffic (__main__.TestDecodeStep.test_data_0x3b_is_not_an_atr_after_traffic) ... ok
|
|
test_data_0x3f_before_traffic_is_atr_candidate (__main__.TestDecodeStep.test_data_0x3f_before_traffic_is_atr_candidate) ... ok
|
|
test_ex_class_exchange_frames (__main__.TestDecodeStep.test_ex_class_exchange_frames) ... ok
|
|
test_extended_channel_exchange_frames (__main__.TestDecodeStep.test_extended_channel_exchange_frames) ... ok
|
|
test_idle_noise_still_discarded (__main__.TestDecodeStep.test_idle_noise_still_discarded) ... ok
|
|
test_immediate_sw_rejection_frames (__main__.TestDecodeStep.test_immediate_sw_rejection_frames) ... ok
|
|
test_invalid_ins_re_frame_recovers_command (__main__.TestDecodeStep.test_invalid_ins_re_frame_recovers_command) ... ok
|
|
test_inverse_ts_raw_pattern_is_an_atr_candidate (__main__.TestDecodeStep.test_inverse_ts_raw_pattern_is_an_atr_candidate) ... ok
|
|
test_le_256_response_data_is_kept (__main__.TestDecodeStep.test_le_256_response_data_is_kept) ... ok
|
|
test_parity_error_flags_bad_fcs (__main__.TestDecodeStep.test_parity_error_flags_bad_fcs) ... ok
|
|
test_short_response_is_split_and_flagged (__main__.TestDecodeStep.test_short_response_is_split_and_flagged) ... ok
|
|
test_short_response_replays_following_exchange (__main__.TestDecodeStep.test_short_response_replays_following_exchange) ... ok
|
|
test_text_byte_boundary_is_discarded_not_framed (__main__.TestDecodeStep.test_text_byte_boundary_is_discarded_not_framed) ... ok
|
|
test_glitch_low_pulse_removed (__main__.TestDeglitchEdges.test_glitch_low_pulse_removed) ... ok
|
|
test_no_edges (__main__.TestDeglitchEdges.test_no_edges) ... ok
|
|
test_real_pulses_preserved (__main__.TestDeglitchEdges.test_real_pulses_preserved) ... ok
|
|
test_short_pulse_start_edge_preserved (__main__.TestDeglitchEdges.test_short_pulse_start_edge_preserved) ... ok
|
|
test_idle_noise_byte (__main__.TestDesyncHelpers.test_idle_noise_byte) ... ok
|
|
test_is_desynced_all_zero_is_not_desync (__main__.TestDesyncHelpers.test_is_desynced_all_zero_is_not_desync) ... ok
|
|
test_is_desynced_bad_sw (__main__.TestDesyncHelpers.test_is_desynced_bad_sw) ... ok
|
|
test_is_desynced_clean_packets (__main__.TestDesyncHelpers.test_is_desynced_clean_packets) ... ok
|
|
test_is_desynced_extended_channel_valid (__main__.TestDesyncHelpers.test_is_desynced_extended_channel_valid) ... ok
|
|
test_is_desynced_null_sw1_is_invalid (__main__.TestDesyncHelpers.test_is_desynced_null_sw1_is_invalid) ... ok
|
|
test_is_desynced_oversized (__main__.TestDesyncHelpers.test_is_desynced_oversized) ... ok
|
|
test_is_desynced_short_fragment (__main__.TestDesyncHelpers.test_is_desynced_short_fragment) ... ok
|
|
test_max_tpdu_len (__main__.TestDesyncHelpers.test_max_tpdu_len) ... ok
|
|
test_plausible_sw_accepts_valid_classes (__main__.TestDesyncHelpers.test_plausible_sw_accepts_valid_classes) ... ok
|
|
test_plausible_sw_rejects_garbage (__main__.TestDesyncHelpers.test_plausible_sw_rejects_garbage) ... ok
|
|
test_resync_idle_waits_on_a_level_condition (__main__.TestDesyncHelpers.test_resync_idle_waits_on_a_level_condition) ... ok
|
|
test_a55_u1_concat (__main__.TestEmbeddedExchanges.test_a55_u1_concat) ... ok
|
|
test_a55_u4_mega_concat (__main__.TestEmbeddedExchanges.test_a55_u4_mega_concat) ... ok
|
|
test_channel1_select_after_manage_channel_swallow (__main__.TestEmbeddedExchanges.test_channel1_select_after_manage_channel_swallow) ... ok
|
|
test_clean_atr_fragment_select (__main__.TestEmbeddedExchanges.test_clean_atr_fragment_select) ... ok
|
|
test_clean_channel1_select_after_manage_channel (__main__.TestEmbeddedExchanges.test_clean_channel1_select_after_manage_channel) ... ok
|
|
test_clean_get_response_fcp (__main__.TestEmbeddedExchanges.test_clean_get_response_fcp) ... ok
|
|
test_clean_read_record_ff_run (__main__.TestEmbeddedExchanges.test_clean_read_record_ff_run) ... ok
|
|
test_clean_secured_packet_payload_alcor (__main__.TestEmbeddedExchanges.test_clean_secured_packet_payload_alcor) ... ok
|
|
test_clean_select_611e (__main__.TestEmbeddedExchanges.test_clean_select_611e) ... ok
|
|
test_clean_select_6a82 (__main__.TestEmbeddedExchanges.test_clean_select_6a82) ... ok
|
|
test_concat_packets_are_not_is_desynced (__main__.TestEmbeddedExchanges.test_concat_packets_are_not_is_desynced) ... ok
|
|
test_embedded_cla_membership_pinned (__main__.TestEmbeddedExchanges.test_embedded_cla_membership_pinned) ... ok
|
|
test_samsung_record_burst_concat (__main__.TestEmbeddedExchanges.test_samsung_record_burst_concat) ... ok
|
|
test_xiaomi_select_getresp_swallow (__main__.TestEmbeddedExchanges.test_xiaomi_select_getresp_swallow) ... ok
|
|
test_eoferror_propagates (__main__.TestEndOfStream.test_eoferror_propagates) ... ok
|
|
test_systemerror_propagates (__main__.TestEndOfStream.test_systemerror_propagates) ... ok
|
|
test_ff_burst_is_accepted (__main__.TestEtuCandidate.test_ff_burst_is_accepted) ... ok
|
|
test_normal_burst_is_accepted (__main__.TestEtuCandidate.test_normal_burst_is_accepted) ... ok
|
|
test_single_spacing_is_rejected (__main__.TestEtuCandidate.test_single_spacing_is_rejected) ... ok
|
|
test_zero_run_guard_is_rejected (__main__.TestEtuCandidate.test_zero_run_guard_is_rejected) ... ok
|
|
test_build_packet_bad_fcs_flag (__main__.TestGsmtapFlags.test_build_packet_bad_fcs_flag) ... ok
|
|
test_build_packet_payload_passthrough (__main__.TestGsmtapFlags.test_build_packet_payload_passthrough) ... ok
|
|
test_build_packet_plain_res_zero (__main__.TestGsmtapFlags.test_build_packet_plain_res_zero) ... ok
|
|
test_flag_constant_value (__main__.TestGsmtapFlags.test_flag_constant_value) ... ok
|
|
test_pps_subtypes_are_standard (__main__.TestGsmtapFlags.test_pps_subtypes_are_standard) ... ok
|
|
test_get_bytes_direct_lsb_first (__main__.TestInverseConvention.test_get_bytes_direct_lsb_first) ... ok
|
|
test_get_bytes_inverse_msb_first (__main__.TestInverseConvention.test_get_bytes_inverse_msb_first) ... ok
|
|
test_ts_from_bits_direct_inverse_and_garbage (__main__.TestInverseConvention.test_ts_from_bits_direct_inverse_and_garbage) ... ok
|
|
test_wait_data_falling_uses_high_idle_and_falling_start (__main__.TestInverseConvention.test_wait_data_falling_uses_high_idle_and_falling_start) ... ok
|
|
test_base_payload_without_rate (__main__.TestLineEventPayload.test_base_payload_without_rate) ... ok
|
|
test_flag_constant (__main__.TestLineEventPayload.test_flag_constant) ... ok
|
|
test_legacy_prefix_preserved (__main__.TestLineEventPayload.test_legacy_prefix_preserved) ... ok
|
|
test_payload_with_clk_rate (__main__.TestLineEventPayload.test_payload_with_clk_rate) ... ok
|
|
test_rate_absent_when_unknown (__main__.TestLineEventPayload.test_rate_absent_when_unknown) ... ok
|
|
test_accepts_full_hold_fall (__main__.TestNextStartFall.test_accepts_full_hold_fall) ... ok
|
|
test_finds_fall_after_threshold (__main__.TestNextStartFall.test_finds_fall_after_threshold) ... ok
|
|
test_finds_fall_exactly_at_threshold (__main__.TestNextStartFall.test_finds_fall_exactly_at_threshold)
|
|
Regression test for Samsung 16 CLK/ETU concatenation. ... ok
|
|
test_rejects_phantom_sub_etu_fall (__main__.TestNextStartFall.test_rejects_phantom_sub_etu_fall) ... ok
|
|
test_returns_none_when_no_fall (__main__.TestNextStartFall.test_returns_none_when_no_fall) ... ok
|
|
test_etu_glitch_floor_scales (__main__.TestSamplerateScaling.test_etu_glitch_floor_scales) ... ok
|
|
test_samples_for_us (__main__.TestSamplerateScaling.test_samples_for_us) ... ok
|
|
test_advancing_sample_is_not_stall (__main__.TestStallCheck.test_advancing_sample_is_not_stall) ... ok
|
|
test_none_pins_is_eof (__main__.TestStallCheck.test_none_pins_is_eof) ... ok
|
|
test_repeated_same_sample_is_bounded_stall (__main__.TestStallCheck.test_repeated_same_sample_is_bounded_stall) ... ok
|
|
test_untracked_level_wait_never_stalls (__main__.TestStallCheck.test_untracked_level_wait_never_stalls) ... ok
|
|
test_untracked_resets_stall_window (__main__.TestStallCheck.test_untracked_resets_stall_window) ... ok
|
|
test_decode_step_reads_exactly_one_block (__main__.TestT1Blocks.test_decode_step_reads_exactly_one_block) ... ok
|
|
test_handle_pps_truncated_is_clean (__main__.TestT1Blocks.test_handle_pps_truncated_is_clean) ... ok
|
|
test_handle_pps_truncated_optional_is_clean (__main__.TestT1Blocks.test_handle_pps_truncated_optional_is_clean) ... ok
|
|
test_i_block (__main__.TestT1Blocks.test_i_block) ... ok
|
|
test_m_chain_concatenates_inf (__main__.TestT1Blocks.test_m_chain_concatenates_inf) ... ok
|
|
test_r_and_s_blocks_have_no_inf (__main__.TestT1Blocks.test_r_and_s_blocks_have_no_inf) ... ok
|
|
test_truncated_block_before_lrc_is_clean (__main__.TestT1Blocks.test_truncated_block_before_lrc_is_clean) ... ok
|
|
test_truncated_inf_is_clean (__main__.TestT1Blocks.test_truncated_inf_is_clean) ... ok
|
|
test_invalid_cla (__main__.TestValidateT0Apdu.test_invalid_cla) ... ok
|
|
test_invalid_cla_reserved_and_unseen (__main__.TestValidateT0Apdu.test_invalid_cla_reserved_and_unseen) ... ok
|
|
test_invalid_cla_untraced_variants (__main__.TestValidateT0Apdu.test_invalid_cla_untraced_variants) ... ok
|
|
test_invalid_ins_odd_undefined (__main__.TestValidateT0Apdu.test_invalid_ins_odd_undefined) ... ok
|
|
test_invalid_ins_sw_collision (__main__.TestValidateT0Apdu.test_invalid_ins_sw_collision) ... ok
|
|
test_invalid_ins_zero (__main__.TestValidateT0Apdu.test_invalid_ins_zero) ... ok
|
|
test_invalid_oversized (__main__.TestValidateT0Apdu.test_invalid_oversized) ... ok
|
|
test_invalid_sw1 (__main__.TestValidateT0Apdu.test_invalid_sw1) ... ok
|
|
test_invalid_too_short (__main__.TestValidateT0Apdu.test_invalid_too_short) ... ok
|
|
test_odd_ins_set_pinned (__main__.TestValidateT0Apdu.test_odd_ins_set_pinned) ... ok
|
|
test_valid_case1_direct_sw (__main__.TestValidateT0Apdu.test_valid_case1_direct_sw) ... ok
|
|
test_valid_case2_with_response (__main__.TestValidateT0Apdu.test_valid_case2_with_response) ... ok
|
|
test_valid_case3_with_command_data (__main__.TestValidateT0Apdu.test_valid_case3_with_command_data) ... ok
|
|
test_valid_cla_channel1_select_after_manage_channel (__main__.TestValidateT0Apdu.test_valid_cla_channel1_select_after_manage_channel) ... ok
|
|
test_valid_cla_extended_channel_exchanges (__main__.TestValidateT0Apdu.test_valid_cla_extended_channel_exchanges) ... ok
|
|
test_valid_cla_interindustry_classes (__main__.TestValidateT0Apdu.test_valid_cla_interindustry_classes) ... ok
|
|
test_valid_cla_uicc_classes (__main__.TestValidateT0Apdu.test_valid_cla_uicc_classes) ... ok
|
|
test_valid_direct_sw_with_p3_nonzero (__main__.TestValidateT0Apdu.test_valid_direct_sw_with_p3_nonzero) ... ok
|
|
test_valid_ins_odd_variants (__main__.TestValidateT0Apdu.test_valid_ins_odd_variants) ... ok
|
|
test_vs_reader_mirror (__main__.TestValidateT0Apdu.test_vs_reader_mirror) ... ok
|
|
|
|
----------------------------------------------------------------------
|
|
Ran 130 tests in 0.029s
|
|
|
|
OK
|