CHG: a select_legic function with structs and stuff and
This commit is contained in:
20
common/crc.c
20
common/crc.c
@@ -29,6 +29,7 @@ void crc_init(crc_t *crc, int order, uint32_t polynom, uint32_t initial_value, u
|
||||
}
|
||||
|
||||
void crc_clear(crc_t *crc) {
|
||||
|
||||
crc->state = crc->initial_value & crc->mask;
|
||||
if (crc->refin)
|
||||
crc->state = reflect(crc->state, crc->order);
|
||||
@@ -36,26 +37,33 @@ void crc_clear(crc_t *crc) {
|
||||
|
||||
void crc_update(crc_t *crc, uint32_t indata, int data_width){
|
||||
|
||||
uint32_t poly = crc->polynom;
|
||||
|
||||
// if requested, return the initial CRC */
|
||||
if (indata == 0)
|
||||
return crc->initial_value;
|
||||
|
||||
//reflected
|
||||
if (crc->refin) indata = reflect(indata, data_width);
|
||||
if (crc->refin)
|
||||
indata = reflect(indata, data_width);
|
||||
|
||||
// Bring the next byte into the remainder.
|
||||
crc->state ^= indata << (crc->order - data_width);
|
||||
|
||||
for( uint8_t bit = data_width; bit > 0; --bit) {
|
||||
|
||||
|
||||
for( uint8_t bit = data_width; bit > 0; --bit) {
|
||||
// Try to divide the current data bit.
|
||||
if (crc->state & crc->topbit)
|
||||
crc->state = (crc->state << 1) ^ crc->polynom;
|
||||
crc->state = (crc->state << 1) ^ poly;
|
||||
else
|
||||
crc->state = (crc->state << 1);
|
||||
}
|
||||
return crc ^ model->xorout;
|
||||
}
|
||||
|
||||
void crc_update2(crc_t *crc, uint32_t data, int data_width)
|
||||
{
|
||||
if (crc->refin) data = reflect(data, data_width);
|
||||
if (crc->refin)
|
||||
data = reflect(data, data_width);
|
||||
|
||||
int i;
|
||||
for(i=0; i<data_width; i++) {
|
||||
|
||||
@@ -31,7 +31,7 @@ typedef struct {
|
||||
uint8_t mem_config; //[13]
|
||||
uint8_t eas; //[14]
|
||||
uint8_t fuses; //[15]
|
||||
}picopass_conf_block;
|
||||
} picopass_conf_block;
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -41,8 +41,7 @@ typedef struct {
|
||||
uint8_t key_d[8];
|
||||
uint8_t key_c[8];
|
||||
uint8_t app_issuer_area[8];
|
||||
|
||||
}picopass_hdr;
|
||||
} picopass_hdr;
|
||||
|
||||
uint8_t isset(uint8_t val, uint8_t mask) {
|
||||
return (val & mask);
|
||||
|
||||
Reference in New Issue
Block a user