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 ) {
@@ -1332,8 +1322,6 @@ static int CmdHFFelicaReadPlain(const char *Cmd) {
13321322 datalen -= 2 ;
13331323 }
13341324 } else {
1335- AddCrc (data , datalen );
1336- datalen += 2 ;
13371325 felica_read_without_encryption_response_t rd_noCry_resp ;
13381326 if (send_rd_plain (flags , datalen , data , 1 , & rd_noCry_resp ) == PM3_SUCCESS ) {
13391327 print_rd_plain_response (& rd_noCry_resp );
@@ -1388,9 +1376,6 @@ static int CmdHFFelicaRequestResponse(const char *Cmd) {
13881376 return PM3_EINVARG ;
13891377 }
13901378
1391- AddCrc (data , datalen );
1392- datalen += 2 ;
1393-
13941379 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
13951380 clear_and_send_command (flags , datalen , data , 0 );
13961381
@@ -1491,8 +1476,6 @@ static int CmdHFFelicaRequestSpecificationVersion(const char *Cmd) {
14911476 return PM3_EINVARG ;
14921477 }
14931478
1494- AddCrc (data , datalen );
1495- datalen += 2 ;
14961479 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
14971480
14981481 clear_and_send_command (flags , datalen , data , 0 );
@@ -1595,8 +1578,6 @@ static int CmdHFFelicaResetMode(const char *Cmd) {
15951578 return PM3_EINVARG ;
15961579 }
15971580
1598- AddCrc (data , datalen );
1599- datalen += 2 ;
16001581 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
16011582
16021583 clear_and_send_command (flags , datalen , data , 0 );
@@ -1666,8 +1647,6 @@ static int CmdHFFelicaRequestSystemCode(const char *Cmd) {
16661647 return PM3_EINVARG ;
16671648 }
16681649
1669- AddCrc (data , datalen );
1670- datalen += 2 ;
16711650 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW );
16721651
16731652 clear_and_send_command (flags , datalen , data , 0 );
@@ -1744,9 +1723,8 @@ static int CmdHFFelicaDump(const char *Cmd) {
17441723
17451724 data_service_dump [10 ] = cursor & 0xFF ;
17461725 data_service_dump [11 ] = cursor >> 8 ;
1747- AddCrc (data_service_dump , service_datalen );
17481726
1749- if (send_dump_sv_plain (flags , service_datalen + 2 , data_service_dump , 0 ,
1727+ if (send_dump_sv_plain (flags , service_datalen , data_service_dump , 0 ,
17501728 & resp , false) != PM3_SUCCESS ) {
17511729 PrintAndLogEx (FAILED , "No response at cursor 0x%04X" , cursor );
17521730 return PM3_ERFTRANS ;
@@ -1812,9 +1790,8 @@ static int CmdHFFelicaDump(const char *Cmd) {
18121790 uint16_t last_blockno = 0xFF ;
18131791 for (uint16_t i = 0x00 ; i < last_blockno ; i ++ ) {
18141792 data_block_dump [15 ] = i ;
1815- AddCrc (data_block_dump , block_datalen );
18161793 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 )) {
1794+ if ((send_rd_plain (flags , block_datalen , data_block_dump , 0 , & rd_noCry_resp ) == PM3_SUCCESS )) {
18181795 if (rd_noCry_resp .status_flags .status_flag1 [0 ] == 0 && rd_noCry_resp .status_flags .status_flag2 [0 ] == 0 ) {
18191796 print_rd_plain_response (& rd_noCry_resp );
18201797 } else {
@@ -1938,13 +1915,11 @@ static int CmdHFFelicaRequestService(const char *Cmd) {
19381915 // send 32 calls
19391916 for (uint8_t i = 1 ; i < 32 ; i ++ ) {
19401917 data [10 ] = i ;
1941- AddCrc (data , datalen );
1942- send_request_service (flags , datalen + 2 , data , 1 );
1918+ send_request_service (flags , datalen , data , 1 );
19431919 }
19441920
19451921 } else {
1946- AddCrc (data , datalen );
1947- send_request_service (flags , datalen + 2 , data , 1 );
1922+ send_request_service (flags , datalen , data , 1 );
19481923 }
19491924
19501925 return PM3_SUCCESS ;
@@ -1992,9 +1967,8 @@ static int CmdHFFelicaDumpServiceArea(const char *Cmd) {
19921967 /* insert cursor LE */
19931968 data [10 ] = cursor & 0xFF ;
19941969 data [11 ] = cursor >> 8 ;
1995- AddCrc (data , datalen );
19961970
1997- if (send_dump_sv_plain (flags , datalen + 2 , data , 0 ,
1971+ if (send_dump_sv_plain (flags , datalen , data , 0 ,
19981972 & resp , false) != PM3_SUCCESS ) {
19991973 PrintAndLogEx (FAILED , "No response at cursor 0x%04X" , cursor );
20001974 return PM3_ERFTRANS ;
@@ -2522,9 +2496,6 @@ static int felica_internal_authentication(
25222496 return PM3_ERFTRANS ;
25232497 }
25242498
2525- AddCrc (data , datalen );
2526- datalen += 2 ;
2527-
25282499 uint8_t flags = (FELICA_APPEND_CRC | FELICA_RAW | FELICA_NO_DISCONNECT );
25292500
25302501 felica_status_response_t res ;
@@ -2546,9 +2517,6 @@ static int felica_internal_authentication(
25462517 return PM3_ERFTRANS ;
25472518 }
25482519
2549- AddCrc (data , datalen );
2550- datalen += 2 ;
2551-
25522520 uint8_t pd [FELICA_BLK_SIZE * sizeof (blk_numbers2 )];
25532521 memset (pd , 0 , sizeof (pd ));
25542522
@@ -2612,9 +2580,6 @@ static int felica_external_authentication(
26122580 return PM3_ERFTRANS ;
26132581 }
26142582
2615- AddCrc (data , datalen );
2616- datalen += 2 ;
2617-
26182583 uint8_t wcnt_blk [FELICA_BLK_SIZE ];
26192584 ret = send_rd_multiple_plain (flags , datalen , data , wcnt_blk );
26202585 if (ret ) {
@@ -2640,9 +2605,6 @@ static int felica_external_authentication(
26402605 return PM3_ERFTRANS ;
26412606 }
26422607
2643- AddCrc (data , datalen );
2644- datalen += 2 ;
2645-
26462608 if (keep == false) {
26472609 flags &= ~FELICA_NO_DISCONNECT ;
26482610 }
@@ -3116,12 +3078,12 @@ static int CmdHFFelicaCmdRaw(const char *Cmd) {
31163078 CLIGetHexWithReturn (ctx , 7 , data , & datalen );
31173079 CLIParserFree (ctx );
31183080
3081+ uint8_t flags = 0 ;
3082+
31193083 if (crc ) {
3120- AddCrc (data , datalen );
3121- datalen += 2 ;
3084+ flags |= FELICA_APPEND_CRC ;
31223085 }
31233086
3124- uint8_t flags = 0 ;
31253087 if (active || active_select ) {
31263088 flags |= FELICA_CONNECT ;
31273089 if (active ) {
0 commit comments