]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
more verification on FDX-B tag demod - reduce...
authormarshmellow42 <marshmellowrf@gmail.com>
Mon, 6 Jul 2015 03:35:00 +0000 (23:35 -0400)
committermarshmellow42 <marshmellowrf@gmail.com>
Mon, 6 Jul 2015 03:35:00 +0000 (23:35 -0400)
... false positives

client/cmddata.c
common/lfdemod.c

index bec1b5aa3f4d4394f011394fa61edca5b9a06767..bf10a6ec145e96e54a4ea4e42403138d0eca6b20 100644 (file)
@@ -1491,9 +1491,9 @@ int CmdFDXBdemodBI(const char *Cmd){
 
        setDemodBuf(BitStream, 128, preambleIndex);
 
-       // remove but don't verify parity. (pType = 2)
+       // remove marker bits (1's every 9th digit after preamble) (pType = 2)
        size = removeParity(BitStream, preambleIndex + 11, 9, 2, 117);
-       if ( size <= 103 ) {
+       if ( size != 104 ) {
                if (g_debugMode) PrintAndLog("Error removeParity:: %d", size);
                return 0;
        }
index f13a567c6fe8cda87b1cf70248cd201603fe023f..a3a7a50087727fc1f85a7a5a8df881537e21e04e 100644 (file)
@@ -580,7 +580,7 @@ int IOdemodFSK(uint8_t *dest, size_t size)
 
 // 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 for just drop it), and binary Length (length to run) 
+//   Parity Type (1 for odd; 0 for even; 2 Always 1'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;
@@ -590,10 +590,12 @@ size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t p
                        parityWd = (parityWd << 1) | BitStream[startIdx+word+bit];
                        BitStream[j++] = (BitStream[startIdx+word+bit]);
                }
-               j--;
+               j--; // overwrite parity with next data
                // if parity fails then return 0
-               if (pType != 2) {
-                       if (parityTest(parityWd, pLen, pType) == 0) return -1;
+               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;                   
                }
                bitCnt+=(pLen-1);
                parityWd = 0;
Impressum, Datenschutz