CHG: a select_legic function with structs and stuff and

This commit is contained in:
iceman1001 2016-09-29 12:23:09 +02:00
commit a39944216d
7 changed files with 132 additions and 95 deletions

View file

@ -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++) {

View file

@ -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);