mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-08 06:00:53 -07:00
more verification on FDX-B tag demod - reduce...
... false positives
This commit is contained in:
parent
7ce6e2c0b5
commit
29b6cacc6f
2 changed files with 8 additions and 6 deletions
|
@ -1491,9 +1491,9 @@ int CmdFDXBdemodBI(const char *Cmd){
|
||||||
|
|
||||||
setDemodBuf(BitStream, 128, preambleIndex);
|
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);
|
size = removeParity(BitStream, preambleIndex + 11, 9, 2, 117);
|
||||||
if ( size <= 103 ) {
|
if ( size != 104 ) {
|
||||||
if (g_debugMode) PrintAndLog("Error removeParity:: %d", size);
|
if (g_debugMode) PrintAndLog("Error removeParity:: %d", size);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -580,7 +580,7 @@ int IOdemodFSK(uint8_t *dest, size_t size)
|
||||||
|
|
||||||
// by marshmellow
|
// by marshmellow
|
||||||
// takes a array of binary values, start position, length of bits per parity (includes parity bit),
|
// 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)
|
size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen)
|
||||||
{
|
{
|
||||||
uint32_t parityWd = 0;
|
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];
|
parityWd = (parityWd << 1) | BitStream[startIdx+word+bit];
|
||||||
BitStream[j++] = (BitStream[startIdx+word+bit]);
|
BitStream[j++] = (BitStream[startIdx+word+bit]);
|
||||||
}
|
}
|
||||||
j--;
|
j--; // overwrite parity with next data
|
||||||
// if parity fails then return 0
|
// if parity fails then return 0
|
||||||
if (pType != 2) {
|
if (pType == 2) { // then marker bit which should be a 1
|
||||||
if (parityTest(parityWd, pLen, pType) == 0) return -1;
|
if (!BitStream[j]) return 0;
|
||||||
|
} else {
|
||||||
|
if (parityTest(parityWd, pLen, pType) == 0) return 0;
|
||||||
}
|
}
|
||||||
bitCnt+=(pLen-1);
|
bitCnt+=(pLen-1);
|
||||||
parityWd = 0;
|
parityWd = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue