From b0dd246d94bc9445ae203827601971303e7a2dc9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 6 Sep 2024 09:52:30 +0200 Subject: [PATCH] const and bad OR --- armsrc/iso14443a.c | 4 ++-- armsrc/iso14443a.h | 2 +- armsrc/mifaresim.c | 2 +- armsrc/mifareutil.c | 25 +++++++++++++++++-------- armsrc/util.c | 2 +- armsrc/util.h | 4 ++-- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 2480113fd..cc0ac3df7 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -947,7 +947,7 @@ static void Code4bitAnswerAsTag(uint8_t cmd) { // stop when button is pressed or client usb connection resets // or return TRUE when command is captured //----------------------------------------------------------------------------- -bool GetIso14443aCommandFromReader(uint8_t *received, uint16_t received_max_len, uint8_t *par, int *len) { +bool GetIso14443aCommandFromReader(uint8_t *received, uint16_t received_maxlen, uint8_t *par, int *len) { // Set FPGA mode to "simulated ISO 14443 tag", no modulation (listen // only, since we are receiving, not transmitting). // Signal field is off with the appropriate LED @@ -955,7 +955,7 @@ bool GetIso14443aCommandFromReader(uint8_t *received, uint16_t received_max_len, FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_TAGSIM_LISTEN); // Now run a `software UART` on the stream of incoming samples. - Uart14aInit(received, received_max_len, par); + Uart14aInit(received, received_maxlen, par); // clear RXRDY: uint8_t b = (uint8_t)AT91C_BASE_SSC->SSC_RHR; diff --git a/armsrc/iso14443a.h b/armsrc/iso14443a.h index 30bd596a8..c3b155122 100644 --- a/armsrc/iso14443a.h +++ b/armsrc/iso14443a.h @@ -142,7 +142,7 @@ RAMFUNC int ManchesterDecoding(uint8_t bit, uint16_t offset, uint32_t non_real_t void RAMFUNC SniffIso14443a(uint8_t param); void SimulateIso14443aTag(uint8_t tagType, uint16_t flags, uint8_t *data, uint8_t exitAfterNReads); bool SimulateIso14443aInit(uint8_t tagType, uint16_t flags, uint8_t *data, tag_response_info_t **responses, uint32_t *cuid, uint32_t counters[3], uint8_t tearings[3], uint8_t *pages); -bool GetIso14443aCommandFromReader(uint8_t *received, uint16_t rec_maxlen, uint8_t *par, int *len); +bool GetIso14443aCommandFromReader(uint8_t *received, uint16_t received_maxlen, uint8_t *par, int *len); void iso14443a_antifuzz(uint32_t flags); void ReaderIso14443a(PacketCommandNG *c); void ReaderTransmit(uint8_t *frame, uint16_t len, uint32_t *timing); diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index 1164328b3..29df75fb6 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -304,7 +304,7 @@ static bool MifareSimInit(uint16_t flags, uint8_t *datain, uint16_t atqa, uint8_ } // Correct uid size bits in ATQA - rATQA[0] = (rATQA[0] & 0x3f) | 0x00; // single size uid + rATQA[0] = (rATQA[0] & 0x3f); // single size uid } else if ((flags & FLAG_7B_UID_IN_DATA) == FLAG_7B_UID_IN_DATA) { memcpy(&rUIDBCC1[1], datain, 3); diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index 0ad60d2d4..669e0d494 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -145,7 +145,8 @@ int mifare_classic_auth(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, int mifare_classic_authex(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t keyType, uint64_t ui64Key, uint8_t isNested, uint32_t *ntptr, uint32_t *timing) { return mifare_classic_authex_cmd(pcs, uid, blockNo, MIFARE_AUTH_KEYA + (keyType & 0xF), ui64Key, isNested, ntptr, NULL, NULL, timing, false, false); } -int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t cmd, uint64_t ui64Key, uint8_t isNested, uint32_t *ntptr, uint32_t *ntencptr, uint8_t *ntparptr, uint32_t *timing, bool corruptnrar, bool corruptnrarparity) { +int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t blockNo, uint8_t cmd, uint64_t ui64Key, uint8_t isNested, + uint32_t *ntptr, uint32_t *ntencptr, uint8_t *ntencparptr, uint32_t *timing, bool corruptnrar, bool corruptnrarparity) { // "random" reader nonce: uint8_t nr[4]; num_to_bytes(prng_successor(GetTickCount(), 32), 4, nr); @@ -159,14 +160,18 @@ int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t bl // Save the tag nonce (nt) uint32_t nt = bytes_to_num(receivedAnswer, 4); - if (ntencptr) + if (ntencptr) { *ntencptr = nt; - if (ntparptr) - *ntparptr = receivedAnswerPar[0]; + } + + if (ntencparptr) { + *ntencparptr = receivedAnswerPar[0]; + } // ----------------------------- crypto1 create - if (isNested) + if (isNested) { crypto1_deinit(pcs); + } // Init cipher with key crypto1_init(pcs, ui64Key); @@ -214,8 +219,9 @@ int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t bl } } // save Nt - if (ntptr) + if (ntptr) { *ntptr = nt; + } // Generate (encrypted) nr+parity by loading it into the cipher (Nr) uint32_t pos; @@ -233,11 +239,13 @@ int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t bl Dbprintf("Corrupting nRaR..."); nt ^= 1; } + for (pos = 4; pos < 8; pos++) { nt = prng_successor(nt, 8); mf_nr_ar[pos] = crypto1_byte(pcs, 0x00, 0) ^ (nt & 0xff); par[0] |= (((filter(pcs->odd) ^ oddparity8(nt & 0xff)) & 0x01) << (7 - pos)); } + if (corruptnrarparity) { Dbprintf("Corrupting nRaR parity..."); par[0] ^= 1; @@ -250,15 +258,16 @@ int mifare_classic_authex_cmd(struct Crypto1State *pcs, uint32_t uid, uint8_t bl uint32_t save_timeout = iso14a_get_timeout(); // set timeout for authentication response - if (save_timeout > 106) + if (save_timeout > 106) { iso14a_set_timeout(106); + } // Receive 4 byte tag answer len = ReaderReceive(receivedAnswer, sizeof(receivedAnswer), receivedAnswerPar); iso14a_set_timeout(save_timeout); - if (!len) { + if (len == 0) { if (g_dbglevel >= DBG_EXTENDED) Dbprintf("Authentication failed. Card timeout"); return 2; } diff --git a/armsrc/util.c b/armsrc/util.c index 446e10ee0..028a8fdb2 100644 --- a/armsrc/util.c +++ b/armsrc/util.c @@ -82,7 +82,7 @@ https://github.com/ApertureLabsLtd/RFIDler/blob/master/firmware/Pic32/RFIDler.X/ */ // convert hex to sequence of 0/1 bit values // returns number of bits converted -int hex2binarray(char *target, char *source) { +int hex2binarray(char *target, const char *source) { return hex2binarray_n(target, source, strlen(source)); } diff --git a/armsrc/util.h b/armsrc/util.h index fac928427..96ae692d0 100644 --- a/armsrc/util.h +++ b/armsrc/util.h @@ -84,11 +84,11 @@ size_t nbytes(size_t nbits); uint8_t hex2int(char x); -int hex2binarray(char *target, char *source); +int hex2binarray(char *target, const char *source); int hex2binarray_n(char *target, const char *source, int sourcelen); int binarray2hex(const uint8_t *bs, int bs_len, uint8_t *hex); -void convertToHexArray(uint8_t num, uint8_t *partialKey); +void convertToHexArray(uint8_t num, uint8_t *partialkey); void LED(int led, int ms); void LEDsoff(void);