5#include <mbedtls/include/mbedtls/des.h>
12#define FELICA_IDM_SIZE (8U)
13#define FELICA_PMM_SIZE (8U)
14#define FELICA_DATA_BLOCK_SIZE (16U)
16#define FELICA_CMD_READ_WITHOUT_ENCRYPTION (0x06U)
17#define FELICA_CMD_WRITE_WITHOUT_ENCRYPTION (0x08U)
19#define FELICA_SERVICE_RW_ACCESS (0x0009U)
20#define FELICA_SERVICE_RO_ACCESS (0x000BU)
22#define FELICA_SYSTEM_NODE_CODE (0xFFFFU)
26#define FELICA_KEY_VERSION_UNKNOWN (0xFFFFU)
27#define FELICA_AREA_END_CODE_UNKNOWN (0xFFFFU)
29#define FELICA_BLOCKS_TOTAL_COUNT (28U)
30#define FELICA_BLOCK_INDEX_REG (0x0EU)
31#define FELICA_BLOCK_INDEX_RC (0x80U)
32#define FELICA_BLOCK_INDEX_MAC (0x81U)
33#define FELICA_BLOCK_INDEX_ID (0x82U)
34#define FELICA_BLOCK_INDEX_D_ID (0x83U)
35#define FELICA_BLOCK_INDEX_SER_C (0x84U)
36#define FELICA_BLOCK_INDEX_SYS_C (0x85U)
37#define FELICA_BLOCK_INDEX_CKV (0x86U)
38#define FELICA_BLOCK_INDEX_CK (0x87U)
39#define FELICA_BLOCK_INDEX_MC (0x88U)
40#define FELICA_BLOCK_INDEX_WCNT (0x90U)
41#define FELICA_BLOCK_INDEX_MAC_A (0x91U)
42#define FELICA_BLOCK_INDEX_STATE (0x92U)
43#define FELICA_BLOCK_INDEX_CRC_CHECK (0xA0U)
45#define FELICA_STANDARD_MAX_BLOCK_COUNT (0xFFU)
47#define FELICA_GUARD_TIME_US (20000U)
48#define FELICA_FDT_POLL_FC (10000U)
49#define FELICA_POLL_POLL_MIN_US (1280U)
51#define FELICA_FDT_LISTEN_FC (0)
53#define FELICA_SYSTEM_CODE_CODE (0xFFFFU)
54#define FELICA_TIME_SLOT_1 (0x00U)
55#define FELICA_TIME_SLOT_2 (0x01U)
56#define FELICA_TIME_SLOT_4 (0x03U)
57#define FELICA_TIME_SLOT_8 (0x07U)
58#define FELICA_TIME_SLOT_16 (0x0FU)
60#define FELICA_CMD_REQUEST_SERVICE 0x02
61#define FELICA_CMD_REQUEST_SERVICE_RESP 0x03
62#define FELICA_CMD_REQUEST_RESPONSE 0x04
63#define FELICA_CMD_REQUEST_RESPONSE_RESP 0x05
64#define FELICA_CMD_LIST_SERVICE_CODE 0x0A
65#define FELICA_CMD_LIST_SERVICE_CODE_RESP 0x0B
66#define FELICA_CMD_REQUEST_SYSTEM_CODE 0x0C
67#define FELICA_CMD_REQUEST_SYSTEM_CODE_RESP 0x0D
69#define FELICA_SERVICE_ATTRIBUTE_UNAUTH_READ (0b000001)
70#define FELICA_SERVICE_ATTRIBUTE_READ_ONLY (0b000010)
71#define FELICA_SERVICE_ATTRIBUTE_RANDOM_ACCESS (0b001000)
72#define FELICA_SERVICE_ATTRIBUTE_CYCLIC (0b001100)
73#define FELICA_SERVICE_ATTRIBUTE_PURSE (0b010000)
74#define FELICA_SERVICE_ATTRIBUTE_PURSE_SUBFIELD (0b000110)
76#define FELICA_SF1_SUCCESS (0x00U)
78#define FELICA_SF2_SUCCESS (0x00U)
79#define FELICA_SF2_WARNING_REWRITE_LIMIT (0x71U)
80#define FELICA_SF2_ERROR_SERVICE_COUNT (0xA1U)
81#define FELICA_SF2_ERROR_BLOCK_COUNT (0xA2U)
82#define FELICA_SF2_ERROR_BLOCK_LIST_SERVICE_ORDER (0xA3U)
83#define FELICA_SF2_ERROR_SERVICE_CODE (0xA6U)
84#define FELICA_SF2_ERROR_BLOCK_LIST_ACCESS_MODE (0xA7U)
85#define FELICA_SF2_ERROR_BLOCK_NUMBER (0xA8U)
86#define FELICA_SF2_ERROR_MAC_BLOCKS_MIXED (0xB0U)
87#define FELICA_SF2_ERROR_AUTHENTICATION_REQUIRED (0xB1U)
88#define FELICA_SF2_ERROR_RC_MAC_WCNT (0xB2U)
93 FelicaErrorNotPresent,
94 FelicaErrorColResFailed,
95 FelicaErrorBufferOverflow,
96 FelicaErrorCommunication,
101 FelicaErrorFeatureUnsupported,
112 uint8_t data[FELICA_DATA_BLOCK_SIZE];
117 uint8_t data[FELICA_DATA_BLOCK_SIZE];
141 uint8_t data[FELICA_DATA_BLOCK_SIZE];
155 uint8_t data[FELICA_IDM_SIZE];
160 uint8_t data[FELICA_PMM_SIZE];
168 uint8_t data[FELICA_DATA_BLOCK_SIZE];
199 uint16_t key_version;
207 uint16_t key_version;
212 uint16_t service_code;
217 uint8_t system_code_idx;
218 uint16_t system_code;
219 uint16_t key_version;
229 uint8_t blocks_total;
235 FelicaWorkflowType workflow_type;
242 uint16_t service_code;
248 uint8_t response_code;
263 uint8_t service_code : 4;
264 uint8_t access_mode : 3;
266 uint8_t block_number;
271 uint8_t response_code;
292 uint8_t system_count;
293 uint8_t system_code[];
320const uint8_t* felica_get_uid(
const FelicaData* data,
size_t* uid_len);
322bool felica_set_uid(
FelicaData* data,
const uint8_t* uid,
size_t uid_len);
326void felica_calculate_session_key(
327 mbedtls_des3_context* ctx,
332bool felica_check_mac(
333 mbedtls_des3_context* ctx,
334 const uint8_t* session_key,
336 const uint8_t* blocks,
337 const uint8_t block_count,
340void felica_calculate_mac_read(
341 mbedtls_des3_context* ctx,
342 const uint8_t* session_key,
344 const uint8_t* blocks,
345 const uint8_t block_count,
349void felica_calculate_mac_write(
350 mbedtls_des3_context* ctx,
351 const uint8_t* session_key,
359void felica_get_workflow_type(
FelicaData* data);
NfcDeviceNameType
Verbosity level of the displayed NFC device name.
Definition nfc_device_base.h:14
Abstract interface definitions for the NFC device system.
This file provides a simple (non-type safe) array for elements with (optional) in-place construction ...
Definition system/js_app/modules/js_gui/icon.c:36
Struct which controls the process of authentication and can be passed as a parameter to the applicati...
Definition felica.h:130
FelicaAuthenticationStatus auth_status
Authentication status.
Definition felica.h:134
bool skip_auth
By default it is true, so auth is skipped.
Definition felica.h:131
FelicaCardKey card_key
User must fill this field with known card key in order to pass auth.
Definition felica.h:133
Structure used to hold authentication related fields.
Definition felica.h:147
mbedtls_des3_context des_context
Context for mbedtls des functions.
Definition felica.h:148
FelicaAuthenticationContext context
Public auth context provided to upper levels.
Definition felica.h:150
FelicaSessionKey session_key
Calculated session key.
Definition felica.h:149
In Felica there two types of auth.
Definition felica.h:123
Felica block with status flags indicating last operation with it.
Definition felica.h:165
uint8_t SF1
Status flag 1, equals to 0 when success.
Definition felica.h:166
uint8_t SF2
Status flag 2, equals to 0 when success.
Definition felica.h:167
Separate type for card key block.
Definition felica.h:116
Structure used to store Felica data and additional values about reading.
Definition felica.h:226
Felica filesystem structure.
Definition felica.h:172
Felica ID block.
Definition felica.h:154
Felica PMm block.
Definition felica.h:159
Stucture for holding Felica session key which is calculated from rc and ck.
Definition felica.h:140
Generic NFC device interface.
Definition nfc_device_base_i.h:142
Definition simple_array.c:5
Union which represents filesystem in junction with plain data dump.
Definition felica.h:191