5151#define FELICA_SERVICE_ATTRIBUTE_PURSE_SUBFIELD (0b000110)
5252
5353
54- #define AddCrc (data , len ) compute_crc(CRC_FELICA, (data), (len), (data)+(len)+1, (data)+(len))
55-
5654static int CmdHelp (const char * Cmd );
5755static felica_card_select_t last_known_card ;
5856
@@ -804,8 +802,6 @@ static int CmdHFFelicaAuthentication1(const char *Cmd) {
804802 // Add M1c Challenge to frame
805803 memcpy (data + 16 , output , sizeof (output ));
806804
807- AddCrc (data , datalen );
808- datalen += 2 ;
809805 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
810806
811807 PrintAndLogEx (INFO , "Client send AUTH1 frame: %s" , sprint_hex (data , datalen ));
@@ -993,8 +989,6 @@ static int CmdHFFelicaAuthentication2(const char *Cmd) {
993989 // Add M4c Challenge to frame
994990 memcpy (data + 10 , m4c , sizeof (m4c ));
995991
996- AddCrc (data , datalen );
997- datalen += 2 ;
998992 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
999993
1000994 PrintAndLogEx (INFO , "Client Send AUTH2 Frame: %s" , sprint_hex (data , datalen ));
@@ -1166,8 +1160,6 @@ static int CmdHFFelicaWritePlain(const char *Cmd) {
11661160 }
11671161
11681162 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
1169- AddCrc (data , datalen );
1170- datalen += 2 ;
11711163
11721164 felica_status_response_t wr_noCry_resp ;
11731165 if (send_wr_plain (flags , datalen , data , 1 , & wr_noCry_resp ) == PM3_SUCCESS ) {
@@ -1319,8 +1311,6 @@ static int CmdHFFelicaReadPlain(const char *Cmd) {
13191311
13201312 for (uint16_t i = 0x00 ; i < last_blockno ; i ++ ) {
13211313 data [15 ] = i ;
1322- AddCrc (data , datalen );
1323- datalen += 2 ;
13241314 felica_read_without_encryption_response_t rd_noCry_resp ;
13251315 if ((send_rd_plain (flags , datalen , data , 0 , & rd_noCry_resp ) == PM3_SUCCESS )) {
13261316 if (rd_noCry_resp .status_flags .status_flag1 [0 ] == 0 && rd_noCry_resp .status_flags .status_flag2 [0 ] == 0 ) {
@@ -1329,11 +1319,8 @@ static int CmdHFFelicaReadPlain(const char *Cmd) {
13291319 } else {
13301320 break ;
13311321 }
1332- datalen -= 2 ;
13331322 }
13341323 } else {
1335- AddCrc (data , datalen );
1336- datalen += 2 ;
13371324 felica_read_without_encryption_response_t rd_noCry_resp ;
13381325 if (send_rd_plain (flags , datalen , data , 1 , & rd_noCry_resp ) == PM3_SUCCESS ) {
13391326 print_rd_plain_response (& rd_noCry_resp );
@@ -1388,9 +1375,6 @@ static int CmdHFFelicaRequestResponse(const char *Cmd) {
13881375 return PM3_EINVARG ;
13891376 }
13901377
1391- AddCrc (data , datalen );
1392- datalen += 2 ;
1393-
13941378 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
13951379 clear_and_send_command (flags , datalen , data , 0 );
13961380
@@ -1491,8 +1475,6 @@ static int CmdHFFelicaRequestSpecificationVersion(const char *Cmd) {
14911475 return PM3_EINVARG ;
14921476 }
14931477
1494- AddCrc (data , datalen );
1495- datalen += 2 ;
14961478 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
14971479
14981480 clear_and_send_command (flags , datalen , data , 0 );
@@ -1595,8 +1577,6 @@ static int CmdHFFelicaResetMode(const char *Cmd) {
15951577 return PM3_EINVARG ;
15961578 }
15971579
1598- AddCrc (data , datalen );
1599- datalen += 2 ;
16001580 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
16011581
16021582 clear_and_send_command (flags , datalen , data , 0 );
@@ -1666,8 +1646,6 @@ static int CmdHFFelicaRequestSystemCode(const char *Cmd) {
16661646 return PM3_EINVARG ;
16671647 }
16681648
1669- AddCrc (data , datalen );
1670- datalen += 2 ;
16711649 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
16721650
16731651 clear_and_send_command (flags , datalen , data , 0 );
@@ -1744,9 +1722,8 @@ static int CmdHFFelicaDump(const char *Cmd) {
17441722
17451723 data_service_dump [10 ] = cursor & 0xFF ;
17461724 data_service_dump [11 ] = cursor >> 8 ;
1747- AddCrc (data_service_dump , service_datalen );
17481725
1749- if (send_dump_sv_plain (flags , service_datalen + 2 , data_service_dump , 0 ,
1726+ if (send_dump_sv_plain (flags , service_datalen , data_service_dump , 0 ,
17501727 & resp , false) != PM3_SUCCESS ) {
17511728 PrintAndLogEx (FAILED , "No response at cursor 0x%04X" , cursor );
17521729 return PM3_ERFTRANS ;
@@ -1812,9 +1789,8 @@ static int CmdHFFelicaDump(const char *Cmd) {
18121789 uint16_t last_blockno = 0xFF ;
18131790 for (uint16_t i = 0x00 ; i < last_blockno ; i ++ ) {
18141791 data_block_dump [15 ] = i ;
1815- AddCrc (data_block_dump , block_datalen );
18161792 felica_read_without_encryption_response_t rd_noCry_resp ;
1817- if ((send_rd_plain (flags , block_datalen + 2 , data_block_dump , 0 , & rd_noCry_resp ) == PM3_SUCCESS )) {
1793+ if ((send_rd_plain (flags , block_datalen , data_block_dump , 0 , & rd_noCry_resp ) == PM3_SUCCESS )) {
18181794 if (rd_noCry_resp .status_flags .status_flag1 [0 ] == 0 && rd_noCry_resp .status_flags .status_flag2 [0 ] == 0 ) {
18191795 print_rd_plain_response (& rd_noCry_resp );
18201796 } else {
@@ -1938,13 +1914,11 @@ static int CmdHFFelicaRequestService(const char *Cmd) {
19381914 // send 32 calls
19391915 for (uint8_t i = 1 ; i < 32 ; i ++ ) {
19401916 data [10 ] = i ;
1941- AddCrc (data , datalen );
1942- send_request_service (flags , datalen + 2 , data , 1 );
1917+ send_request_service (flags , datalen , data , 1 );
19431918 }
19441919
19451920 } else {
1946- AddCrc (data , datalen );
1947- send_request_service (flags , datalen + 2 , data , 1 );
1921+ send_request_service (flags , datalen , data , 1 );
19481922 }
19491923
19501924 return PM3_SUCCESS ;
@@ -1992,9 +1966,8 @@ static int CmdHFFelicaDumpServiceArea(const char *Cmd) {
19921966 /* insert cursor LE */
19931967 data [10 ] = cursor & 0xFF ;
19941968 data [11 ] = cursor >> 8 ;
1995- AddCrc (data , datalen );
19961969
1997- if (send_dump_sv_plain (flags , datalen + 2 , data , 0 ,
1970+ if (send_dump_sv_plain (flags , datalen , data , 0 ,
19981971 & resp , false) != PM3_SUCCESS ) {
19991972 PrintAndLogEx (FAILED , "No response at cursor 0x%04X" , cursor );
20001973 return PM3_ERFTRANS ;
@@ -2522,9 +2495,6 @@ static int felica_internal_authentication(
25222495 return PM3_ERFTRANS ;
25232496 }
25242497
2525- AddCrc (data , datalen );
2526- datalen += 2 ;
2527-
25282498 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW | FELICA_NO_DISCONNECT );
25292499
25302500 felica_status_response_t res ;
@@ -2546,9 +2516,6 @@ static int felica_internal_authentication(
25462516 return PM3_ERFTRANS ;
25472517 }
25482518
2549- AddCrc (data , datalen );
2550- datalen += 2 ;
2551-
25522519 uint8_t pd [FELICA_BLK_SIZE * sizeof (blk_numbers2 )];
25532520 memset (pd , 0 , sizeof (pd ));
25542521
@@ -2612,9 +2579,6 @@ static int felica_external_authentication(
26122579 return PM3_ERFTRANS ;
26132580 }
26142581
2615- AddCrc (data , datalen );
2616- datalen += 2 ;
2617-
26182582 uint8_t wcnt_blk [FELICA_BLK_SIZE ];
26192583 ret = send_rd_multiple_plain (flags , datalen , data , wcnt_blk );
26202584 if (ret ) {
@@ -2640,9 +2604,6 @@ static int felica_external_authentication(
26402604 return PM3_ERFTRANS ;
26412605 }
26422606
2643- AddCrc (data , datalen );
2644- datalen += 2 ;
2645-
26462607 if (keep == false) {
26472608 flags &= ~FELICA_NO_DISCONNECT ;
26482609 }
@@ -3116,12 +3077,12 @@ static int CmdHFFelicaCmdRaw(const char *Cmd) {
31163077 CLIGetHexWithReturn (ctx , 7 , data , & datalen );
31173078 CLIParserFree (ctx );
31183079
3080+ uint8_t flags = 0 ;
3081+
31193082 if (crc ) {
3120- AddCrc (data , datalen );
3121- datalen += 2 ;
3083+ flags |= FELICA_APPEND_CRC ;
31223084 }
31233085
3124- uint8_t flags = 0 ;
31253086 if (active || active_select ) {
31263087 flags |= FELICA_CONNECT ;
31273088 if (active ) {
0 commit comments