From: iceman1001 Date: Tue, 1 Mar 2016 05:57:02 +0000 (+0100) Subject: FIX: Added @marshmellow42 's fix for ASK/Biphase simulation on deviceside. X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/c728b2b4cf2ce9fe4eebf0e46d74ef8542e56c16 FIX: Added @marshmellow42 's fix for ASK/Biphase simulation on deviceside. CHG: Added @marshmellow42 's refactoring of "gprox-II" demod. --- diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 7f61c78d..54800f49 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -628,7 +628,7 @@ static void biphaseSimBit(uint8_t c, int *n, uint8_t clock, uint8_t *phase) memset(dest+(*n), c ^ *phase, clock); *phase ^= 1; } - + *n += clock; } // args clock, ask/man or askraw, invert, transmission separator @@ -646,7 +646,7 @@ void CmdASKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream) for (i=0; i>2; uint32_t FC = 0; uint32_t Card = 0; + //get raw 96 bits to print uint32_t raw1 = bytebits_to_byte(DemodBuffer+ans,32); uint32_t raw2 = bytebits_to_byte(DemodBuffer+ans+32, 32); uint32_t raw3 = bytebits_to_byte(DemodBuffer+ans+64, 32); @@ -649,13 +635,14 @@ int CmdG_Prox_II_Demod(const char *Cmd) if (fmtLen==36){ FC = ((ByteStream[3] & 0x7F)<<7) | (ByteStream[4]>>1); Card = ((ByteStream[4]&1)<<19) | (ByteStream[5]<<11) | (ByteStream[6]<<3) | (ByteStream[7]>>5); - PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card); + PrintAndLog("G-Prox-II Found: FmtLen %d, FC %u, Card %u", (int)fmtLen, FC, Card); } else if(fmtLen==26){ FC = ((ByteStream[3] & 0x7F)<<1) | (ByteStream[4]>>7); Card = ((ByteStream[4]&0x7F)<<9) | (ByteStream[5]<<1) | (ByteStream[6]>>7); - PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card); + PrintAndLog("G-Prox-II Found: FmtLen %d, FC %u, Card %u", (int)fmtLen, FC, Card); } else { - PrintAndLog("Unknown G-Prox-II Fmt Found: FmtLen %d",fmtLen); + PrintAndLog("Unknown G-Prox-II Fmt Found: FmtLen %d",(int)fmtLen); + PrintAndLog("Decoded Raw: %s", sprint_hex(ByteStream, 8)); } PrintAndLog("Raw: %08x%08x%08x", raw1,raw2,raw3); setDemodBuf(DemodBuffer+ans, 96, 0); diff --git a/client/cmdlfguard.c b/client/cmdlfguard.c index 05975eea..686ada27 100644 --- a/client/cmdlfguard.c +++ b/client/cmdlfguard.c @@ -48,7 +48,7 @@ int GetGuardBits(uint32_t fc, uint32_t cn, uint8_t *guardBits) { time_t t; srand((unsigned) time(&t)); //uint8_t xorKey = rand() % 0xFF; - uint8_t xorKey = 0x6b; + uint8_t xorKey = 0x66; uint8_t i; diff --git a/common/lfdemod.c b/common/lfdemod.c index edebe456..862d05ba 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -68,7 +68,7 @@ uint8_t parityTest(uint32_t bits, uint8_t bitLen, uint8_t pType) //by marshmellow // takes a array of binary values, start position, length of bits per parity (includes parity bit), -// Parity Type (1 for odd; 0 for even; 2 Always 1's), and binary Length (length to run) +// Parity Type (1 for odd; 0 for even; 2 for Always 1's; 3 for Always 0's), and binary Length (length to run) size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen) { uint32_t parityWd = 0; @@ -80,10 +80,11 @@ size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t p } j--; // overwrite parity with next data // if parity fails then return 0 - if (pType == 2) { // then marker bit which should be a 1 - if (!BitStream[j]) return 0; - } else { - if (parityTest(parityWd, pLen, pType) == 0) return 0; + switch (pType) { + case 3: if (BitStream[j]==1) return 0; break; //should be 0 spacer bit + case 2: if (BitStream[j]==0) return 0; break; //should be 1 spacer bit + default: //test parity + if (parityTest(parityWd, pLen, pType) == 0) return 0; break; } bitCnt+=(pLen-1); parityWd = 0; @@ -96,6 +97,7 @@ size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t p // by marshmellow // takes a array of binary values, length of bits per parity (includes parity bit), // Parity Type (1 for odd; 0 for even; 2 Always 1's; 3 Always 0's), and binary Length (length to run) +// Make sure *dest is long enough to store original sourceLen + #_of_parities_to_be_added size_t addParity(uint8_t *BitSource, uint8_t *dest, uint8_t sourceLen, uint8_t pLen, uint8_t pType) { uint32_t parityWd = 0; @@ -114,7 +116,6 @@ size_t addParity(uint8_t *BitSource, uint8_t *dest, uint8_t sourceLen, uint8_t p dest[j++] = parityTest(parityWd, pLen-1, pType) ^ 1; break; } - bitCnt += pLen; parityWd = 0; }