mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 13:53:55 -07:00
ADD: @marshmellow42 's fixed version of the ISO11784 FDX-B
ADD: crc16_ccitt_rev (reverse version of crc16_ccitt 0x0000)
This commit is contained in:
parent
22a6a62fbb
commit
ad6219fc91
10 changed files with 109 additions and 45 deletions
|
@ -43,3 +43,7 @@ uint16_t crc16(uint8_t const *message, int length, uint16_t remainder, uint16_t
|
|||
uint16_t crc16_ccitt(uint8_t const *message, int length) {
|
||||
return crc16(message, length, 0xffff, 0x1021);
|
||||
}
|
||||
|
||||
uint16_t crc16_ccitt_rev(uint8_t const *message, int length) {
|
||||
return crc16(message, length, 0x0000, 0x1021);
|
||||
}
|
|
@ -12,4 +12,5 @@
|
|||
unsigned short update_crc16(unsigned short crc, unsigned char c);
|
||||
uint16_t crc16(uint8_t const *message, int length, uint16_t remainder, uint16_t polynomial);
|
||||
uint16_t crc16_ccitt(uint8_t const *message, int length);
|
||||
uint16_t crc16_ccitt_rev(uint8_t const *message, int length);
|
||||
#endif
|
||||
|
|
|
@ -537,6 +537,17 @@ uint32_t bytebits_to_byte(uint8_t* src, size_t numbits)
|
|||
return num;
|
||||
}
|
||||
|
||||
//least significant bit first
|
||||
uint32_t bytebits_to_byteLSBF(uint8_t *src, size_t numbits)
|
||||
{
|
||||
uint32_t num = 0;
|
||||
for(int i = 0 ; i < numbits ; i++)
|
||||
{
|
||||
num = (num << 1) | *(src + (numbits-(i+1)));
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
int IOdemodFSK(uint8_t *dest, size_t size)
|
||||
{
|
||||
if (justNoise(dest, size)) return -1;
|
||||
|
@ -569,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), and binary Length (length to run)
|
||||
// Parity Type (1 for odd; 0 for even; 2 for just drop it), 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;
|
||||
|
@ -581,7 +592,9 @@ size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t p
|
|||
}
|
||||
j--;
|
||||
// if parity fails then return 0
|
||||
if (pType != 2) {
|
||||
if (parityTest(parityWd, pLen, pType) == 0) return -1;
|
||||
}
|
||||
bitCnt+=(pLen-1);
|
||||
parityWd = 0;
|
||||
}
|
||||
|
@ -589,9 +602,10 @@ size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t p
|
|||
//return ID start index and size
|
||||
return bitCnt;
|
||||
}
|
||||
|
||||
// Ask/Biphase Demod then try to locate an ISO 11784/85 ID
|
||||
// BitStream must contain previously askrawdemod and biphasedemoded data
|
||||
int ISO11784demodBI(uint8_t *dest, size_t *size)
|
||||
int FDXBdemodBI(uint8_t *dest, size_t *size)
|
||||
{
|
||||
//make sure buffer has enough data
|
||||
if (*size < 128) return -1;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
int askdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr, uint8_t amp, uint8_t askType);
|
||||
int BiphaseRawDecode(uint8_t * BitStream, size_t *size, int offset, int invert);
|
||||
uint32_t bytebits_to_byte(uint8_t* src, size_t numbits);
|
||||
uint32_t bytebits_to_byteLSBF(uint8_t* src, size_t numbits);
|
||||
uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj);
|
||||
int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr);
|
||||
uint8_t DetectCleanAskWave(uint8_t dest[], size_t size, uint8_t high, uint8_t low);
|
||||
|
@ -40,6 +41,7 @@ void psk1TOpsk2(uint8_t *BitStream, size_t size);
|
|||
size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen);
|
||||
|
||||
//tag specific
|
||||
int FDXBdemodBI(uint8_t *dest, size_t *size);
|
||||
int AWIDdemodFSK(uint8_t *dest, size_t *size);
|
||||
int gProxII_Demod(uint8_t BitStream[], size_t *size);
|
||||
int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo);
|
||||
|
@ -47,5 +49,5 @@ int IOdemodFSK(uint8_t *dest, size_t size);
|
|||
int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert);
|
||||
int PyramiddemodFSK(uint8_t *dest, size_t *size);
|
||||
int ParadoxdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo);
|
||||
int ISO11784demodBI(uint8_t *dest, size_t *size);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue