Loading...
Searching...
No Matches
mf_classic_poller.h
1#pragma once
2
3#include "mf_classic.h"
4#include <lib/nfc/protocols/iso14443_3a/iso14443_3a_poller.h>
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
13typedef struct MfClassicPoller MfClassicPoller;
14
18typedef enum {
19 MfClassicPollerEventTypeRequestMode,
21 MfClassicPollerEventTypeRequestReadSector,
23 MfClassicPollerEventTypeRequestSectorTrailer,
24 MfClassicPollerEventTypeRequestWriteBlock,
26 MfClassicPollerEventTypeRequestKey,
27 MfClassicPollerEventTypeNextSector,
28 MfClassicPollerEventTypeDataUpdate,
29 MfClassicPollerEventTypeFoundKeyA,
30 MfClassicPollerEventTypeFoundKeyB,
31 MfClassicPollerEventTypeKeyAttackStart,
32 MfClassicPollerEventTypeKeyAttackStop,
33 MfClassicPollerEventTypeKeyAttackNextSector,
35 MfClassicPollerEventTypeCardDetected,
36 MfClassicPollerEventTypeCardLost,
37 MfClassicPollerEventTypeSuccess,
38 MfClassicPollerEventTypeFail,
39} MfClassicPollerEventType;
40
44typedef enum {
45 MfClassicPollerModeRead,
46 MfClassicPollerModeWrite,
47 MfClassicPollerModeDictAttackStandard,
48 MfClassicPollerModeDictAttackCUID,
49 MfClassicPollerModeDictAttackEnhanced,
50} MfClassicPollerMode;
51
55typedef enum {
56 MfClassicNestedPhaseNone,
57 MfClassicNestedPhaseAnalyzePRNG,
58 MfClassicNestedPhaseDictAttack,
59 MfClassicNestedPhaseDictAttackVerify,
60 MfClassicNestedPhaseDictAttackResume,
61 MfClassicNestedPhaseCalibrate,
62 MfClassicNestedPhaseRecalibrate,
63 MfClassicNestedPhaseCollectNtEnc,
64 MfClassicNestedPhaseFinished,
65} MfClassicNestedPhase;
66
70typedef enum {
71 MfClassicPrngTypeUnknown, // Tag not yet tested
72 MfClassicPrngTypeNoTag, // No tag detected during test
73 MfClassicPrngTypeWeak, // Weak PRNG, standard Nested
74 MfClassicPrngTypeHard, // Hard PRNG, Hardnested
75} MfClassicPrngType;
76
80typedef enum {
81 MfClassicBackdoorUnknown, // Tag not yet tested
82 MfClassicBackdoorNone, // No observed backdoor
83 MfClassicBackdoorAuth1, // Tag responds to v1 auth backdoor
84 MfClassicBackdoorAuth2, // Tag responds to v2 auth backdoor (sometimes static encrypted)
85 MfClassicBackdoorAuth3, // Tag responds to v3 auth backdoor (static encrypted nonce)
86} MfClassicBackdoor;
87
93typedef struct {
94 MfClassicPollerMode mode;
97
107
114typedef struct {
115 uint8_t sectors_read;
116 uint8_t keys_found;
118 MfClassicNestedPhase nested_phase;
119 MfClassicPrngType prng_type;
120 MfClassicBackdoor backdoor;
122 uint16_t
125
136
148
159
170
180
196
202typedef struct {
203 MfClassicPollerEventType type;
206
221MfClassicError mf_classic_poller_get_nt(
222 MfClassicPoller* instance,
223 uint8_t block_num,
224 MfClassicKeyType key_type,
225 MfClassicNt* nt,
226 bool backdoor_auth);
227
242MfClassicError mf_classic_poller_get_nt_nested(
243 MfClassicPoller* instance,
244 uint8_t block_num,
245 MfClassicKeyType key_type,
246 MfClassicNt* nt,
247 bool backdoor_auth);
248
265MfClassicError mf_classic_poller_auth(
266 MfClassicPoller* instance,
267 uint8_t block_num,
268 MfClassicKey* key,
269 MfClassicKeyType key_type,
271 bool backdoor_auth);
272
289MfClassicError mf_classic_poller_auth_nested(
290 MfClassicPoller* instance,
291 uint8_t block_num,
292 MfClassicKey* key,
293 MfClassicKeyType key_type,
295 bool backdoor_auth,
296 bool early_ret);
297
308MfClassicError mf_classic_poller_halt(MfClassicPoller* instance);
309
320MfClassicError mf_classic_poller_read_block(
321 MfClassicPoller* instance,
322 uint8_t block_num,
323 MfClassicBlock* data);
324
335MfClassicError mf_classic_poller_write_block(
336 MfClassicPoller* instance,
337 uint8_t block_num,
338 MfClassicBlock* data);
339
354MfClassicError mf_classic_poller_value_cmd(
355 MfClassicPoller* instance,
356 uint8_t block_num,
357 MfClassicValueCommand cmd,
358 int32_t data);
359
371MfClassicError mf_classic_poller_value_transfer(MfClassicPoller* instance, uint8_t block_num);
372
387MfClassicError mf_classic_poller_send_standard_frame(
388 MfClassicPoller* instance,
389 const BitBuffer* tx_buffer,
390 BitBuffer* rx_buffer,
391 uint32_t fwt_fc);
392
407MfClassicError mf_classic_poller_send_frame(
408 MfClassicPoller* instance,
409 const BitBuffer* tx_buffer,
410 BitBuffer* rx_buffer,
411 uint32_t fwt_fc);
412
430MfClassicError mf_classic_poller_send_custom_parity_frame(
431 MfClassicPoller* instance,
432 const BitBuffer* tx_buffer,
433 BitBuffer* rx_buffer,
434 uint32_t fwt_fc);
435
450MfClassicError mf_classic_poller_send_encrypted_frame(
451 MfClassicPoller* instance,
452 const BitBuffer* tx_buffer,
453 BitBuffer* rx_buffer,
454 uint32_t fwt_fc);
455
456#ifdef __cplusplus
457}
458#endif
Definition bit_buffer.c:7
Definition mf_classic.h:111
Definition mf_classic.h:78
Definition mf_classic.h:137
Definition mf_classic.h:87
Definition mf_classic.h:95
MfClassic poller next sector event data.
Definition mf_classic_poller.h:104
uint8_t current_sector
Current sector number.
Definition mf_classic_poller.h:105
MfClassic poller key request event data.
Definition mf_classic_poller.h:131
bool key_provided
Flag indicating if key is provided.
Definition mf_classic_poller.h:134
MfClassicKeyType key_type
Key type (A or B) for CUID dict attack mode.
Definition mf_classic_poller.h:133
MfClassicKey key
Key to be used by poller.
Definition mf_classic_poller.h:132
MfClassic poller read sector request event data.
Definition mf_classic_poller.h:142
MfClassicKeyType key_type
Key type to be used by poller.
Definition mf_classic_poller.h:145
bool key_provided
Flag indicating if key is provided.
Definition mf_classic_poller.h:146
uint8_t sector_num
Sector number to be read.
Definition mf_classic_poller.h:143
MfClassicKey key
Key to be used by poller.
Definition mf_classic_poller.h:144
MfClassic poller request mode event data.
Definition mf_classic_poller.h:93
const MfClassicData * data
Data to be used by poller.
Definition mf_classic_poller.h:95
MfClassicPollerMode mode
Mode to be used by poller.
Definition mf_classic_poller.h:94
MfClassic poller sector trailer request event data.
Definition mf_classic_poller.h:154
bool sector_trailer_provided
Flag indicating if sector trailer is provided.
Definition mf_classic_poller.h:157
uint8_t sector_num
Sector number to be read.
Definition mf_classic_poller.h:155
MfClassicBlock sector_trailer
Sector trailer to be used by poller.
Definition mf_classic_poller.h:156
MfClassic poller update event data.
Definition mf_classic_poller.h:114
uint8_t keys_found
Number of keys found.
Definition mf_classic_poller.h:116
uint8_t current_sector
Current sector number.
Definition mf_classic_poller.h:117
MfClassicPrngType prng_type
PRNG (weak or hard).
Definition mf_classic_poller.h:119
uint16_t nested_target_key
Target key for nested attack.
Definition mf_classic_poller.h:121
MfClassicNestedPhase nested_phase
Nested attack phase.
Definition mf_classic_poller.h:118
uint8_t sectors_read
Number of sectors read.
Definition mf_classic_poller.h:115
uint16_t msb_count
Number of unique most significant bytes seen during Hardnested attack.
Definition mf_classic_poller.h:123
MfClassicBackdoor backdoor
Backdoor type.
Definition mf_classic_poller.h:120
MfClassic poller write block request event data.
Definition mf_classic_poller.h:165
bool write_block_provided
Flag indicating if block is provided.
Definition mf_classic_poller.h:168
MfClassicBlock write_block
Block to be written.
Definition mf_classic_poller.h:167
uint8_t block_num
Block number to be written.
Definition mf_classic_poller.h:166
MfClassic poller event.
Definition mf_classic_poller.h:202
MfClassicPollerEventData * data
Pointer to event specific data.
Definition mf_classic_poller.h:204
MfClassicPollerEventType type
Event type.
Definition mf_classic_poller.h:203
MfClassic poller key attack event data.
Definition mf_classic_poller.h:177
uint8_t current_sector
Current sector number.
Definition mf_classic_poller.h:178
Definition mf_classic_poller_i.h:177
MfClassic poller event data.
Definition mf_classic_poller.h:184
MfClassicError error
Error code on MfClassicPollerEventTypeFail event.
Definition mf_classic_poller.h:185
MfClassicPollerEventDataUpdate data_update
Data update context.
Definition mf_classic_poller.h:189
MfClassicPollerEventDataSectorTrailerRequest sec_tr_data
Sector trailer request context.
Definition mf_classic_poller.h:193
MfClassicPollerEventKeyAttackData key_attack_data
Key attack context.
Definition mf_classic_poller.h:192
MfClassicPollerEventDataDictAttackNextSector next_sector_data
Next sector context.
Definition mf_classic_poller.h:187
MfClassicPollerEventDataWriteBlockRequest write_block_data
Write block request context.
Definition mf_classic_poller.h:194
MfClassicPollerEventDataReadSectorRequest read_sector_request_data
Read sector request context.
Definition mf_classic_poller.h:191
MfClassicPollerEventDataKeyRequest key_request_data
Key request context.
Definition mf_classic_poller.h:188
MfClassicPollerEventDataRequestMode poller_mode
Poller mode context.
Definition mf_classic_poller.h:186