mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 05:13:46 -07:00
chg: updated the reveng 1.4.4 -> 1.5.2
'reveng -g 11223344' still breaks.
This commit is contained in:
parent
c5616dfe76
commit
0c6f601f72
9 changed files with 655 additions and 497 deletions
|
@ -71,14 +71,7 @@ int CmdCrc(const char *Cmd)
|
|||
// as well as a width array for the width of each model
|
||||
int GetModels(char *Models[], int *count, uint8_t *width){
|
||||
/* default values */
|
||||
static model_t model = {
|
||||
PZERO, /* no CRC polynomial, user must specify */
|
||||
PZERO, /* Init = 0 */
|
||||
P_BE, /* RefIn = false, RefOut = false, plus P_RTJUST setting in reveng.h */
|
||||
PZERO, /* XorOut = 0 */
|
||||
PZERO, /* check value unused */
|
||||
NULL /* no model name */
|
||||
};
|
||||
static model_t model = MZERO;
|
||||
|
||||
int ibperhx = 8;//, obperhx = 8;
|
||||
int rflags = 0, uflags = 0; /* search and UI flags */
|
||||
|
@ -136,7 +129,7 @@ int GetModels(char *Models[], int *count, uint8_t *width){
|
|||
* searched.
|
||||
*/
|
||||
/* scan against preset models */
|
||||
if (~uflags & C_FORCE) {
|
||||
if (~uflags & C_NOPCK) {
|
||||
pass = 0;
|
||||
Cnt = 0;
|
||||
do {
|
||||
|
@ -252,14 +245,8 @@ int GetModels(char *Models[], int *count, uint8_t *width){
|
|||
//result = calculated crc hex string
|
||||
int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *result){
|
||||
/* default values */
|
||||
static model_t model = {
|
||||
PZERO, // no CRC polynomial, user must specify
|
||||
PZERO, // Init = 0
|
||||
P_BE, // RefIn = false, RefOut = false, plus P_RTJUST setting in reveng.h
|
||||
PZERO, // XorOut = 0
|
||||
PZERO, // check value unused
|
||||
NULL // no model name
|
||||
};
|
||||
static model_t model = MZERO;
|
||||
|
||||
int ibperhx = 8, obperhx = 8;
|
||||
int rflags = 0; // search flags
|
||||
int c;
|
||||
|
@ -389,10 +376,9 @@ int CmdrevengSearch(const char *Cmd){
|
|||
int dataLen = param_getstr(Cmd, 0, inHexStr);
|
||||
if (dataLen < 4) return 0;
|
||||
|
||||
char *Models[80];
|
||||
char *Models[102];
|
||||
int count = 0;
|
||||
uint8_t width[80];
|
||||
width[0] = 0;
|
||||
uint8_t width[80] = {0};
|
||||
uint8_t crcChars = 0;
|
||||
char result[30];
|
||||
char revResult[30];
|
||||
|
@ -464,6 +450,7 @@ int CmdrevengSearch(const char *Cmd){
|
|||
free(outHex);
|
||||
free(Models[i]);
|
||||
}
|
||||
|
||||
if (!found) PrintAndLog("\nNo matches found\n");
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* bmpbit.c
|
||||
* Greg Cook, 27/Jun/2016
|
||||
* Greg Cook, 7/Feb/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* cli.c
|
||||
* Greg Cook, 27/Jun/2016
|
||||
* Greg Cook, 19/Feb/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
@ -21,7 +22,9 @@
|
|||
* along with CRC RevEng. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* 2016-06-27: -P sets width like -k
|
||||
/* 2017-02-18: -G ignored if R_HAVEP
|
||||
* 2017-02-05: added -G
|
||||
* 2016-06-27: -P sets width like -k
|
||||
* 2015-04-03: added -z
|
||||
* 2013-09-16: do not search with -M
|
||||
* 2013-06-11: uprog() suppresses first progress report
|
||||
|
@ -73,14 +76,7 @@ int reveng_main(int argc, char *argv[]) {
|
|||
*/
|
||||
|
||||
/* default values */
|
||||
model_t model = {
|
||||
PZERO, /* no CRC polynomial, user must specify */
|
||||
PZERO, /* Init = 0 */
|
||||
P_BE, /* RefIn = false, RefOut = false, plus P_RTJUST setting in reveng.h */
|
||||
PZERO, /* XorOut = 0 */
|
||||
PZERO, /* check value unused */
|
||||
NULL /* no model name */
|
||||
};
|
||||
model_t model = MZERO;
|
||||
int ibperhx = 8, obperhx = 8;
|
||||
int rflags = 0, uflags = 0; /* search and UI flags */
|
||||
|
||||
|
@ -102,7 +98,7 @@ int reveng_main(int argc, char *argv[]) {
|
|||
pos=0;
|
||||
optind=1;
|
||||
do {
|
||||
c=getopt(argc, argv, "?A:BDFLMP:SVXa:bcdefhi:k:lm:p:q:rstuvw:x:yz");
|
||||
c=getopt(argc, argv, "?A:BDFGLMP:SVXa:bcdefhi:k:lm:p:q:rstuvw:x:yz");
|
||||
switch(c) {
|
||||
case 'A': /* A: bits per output character */
|
||||
case 'a': /* a: bits per character */
|
||||
|
@ -138,14 +134,17 @@ int reveng_main(int argc, char *argv[]) {
|
|||
}
|
||||
mode = c;
|
||||
break;
|
||||
case 'F': /* F force search */
|
||||
case 'F': /* F skip preset model check pass */
|
||||
#ifndef NOFORCE
|
||||
uflags |= C_FORCE;
|
||||
uflags |= C_NOPCK;
|
||||
#endif
|
||||
break;
|
||||
case 'f': /* f arguments are filenames */
|
||||
uflags |= C_INFILE;
|
||||
break;
|
||||
case 'G': /* G skip brute force search pass */
|
||||
uflags |= C_NOBFS;
|
||||
break;
|
||||
case 'h': /* h get help / usage */
|
||||
case 'u': /* u get help / usage */
|
||||
case '?': /* ? get help / usage */
|
||||
|
@ -158,8 +157,8 @@ int reveng_main(int argc, char *argv[]) {
|
|||
pptr = &model.init;
|
||||
rflags |= R_HAVEI;
|
||||
goto ipqx;
|
||||
case 'P': /* P: reversed polynomial */
|
||||
case 'k': /* k: polynomial in Koopman notation */
|
||||
case 'P': /* P: reversed polynomial */
|
||||
pfree(&model.spoly);
|
||||
model.spoly = strtop(optarg, 0, 4);
|
||||
pkchop(&model.spoly);
|
||||
|
@ -322,11 +321,10 @@ ipqx:
|
|||
uerror("no preset models available");
|
||||
return 0;
|
||||
}
|
||||
for(mode = 0; mode < args; ++mode) {
|
||||
mbynum(&model, mode);
|
||||
mcanon(&model);
|
||||
do {
|
||||
mbynum(&model, --args);
|
||||
ufound(&model);
|
||||
}
|
||||
} while(args);
|
||||
break;
|
||||
case 'd': /* d dump CRC model */
|
||||
/* maybe we don't want to do this:
|
||||
|
@ -398,7 +396,7 @@ ipqx:
|
|||
*/
|
||||
|
||||
/* scan against preset models */
|
||||
if(~uflags & C_FORCE) {
|
||||
if(~uflags & C_NOPCK) {
|
||||
pass = 0;
|
||||
do {
|
||||
psets = mcount();
|
||||
|
@ -428,7 +426,6 @@ ipqx:
|
|||
pfree(&apoly);
|
||||
if(qptr == pptr) {
|
||||
/* the selected model solved all arguments */
|
||||
mcanon(&pset);
|
||||
ufound(&pset);
|
||||
uflags |= C_RESULT;
|
||||
}
|
||||
|
@ -449,6 +446,11 @@ ipqx:
|
|||
return 1;
|
||||
//exit(EXIT_SUCCESS);
|
||||
}
|
||||
if(uflags & C_NOBFS && ~rflags & R_HAVEP) {
|
||||
uerror("no models found");
|
||||
return 0;
|
||||
//break;
|
||||
}
|
||||
if(!(model.flags & P_REFIN) != !(model.flags & P_REFOUT)){
|
||||
uerror("cannot search for crossed-endian models");
|
||||
return 0;
|
||||
|
@ -481,6 +483,7 @@ ipqx:
|
|||
break;
|
||||
default: /* no mode specified */
|
||||
fprintf(stderr, "%s: no mode switch specified. Use %s -h for help.\n", myname, myname);
|
||||
return 0;
|
||||
//exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
@ -577,7 +580,7 @@ usage(void) {
|
|||
"Usage:\t");
|
||||
fputs(myname, stderr);
|
||||
fprintf(stderr,
|
||||
"\t-cdDesvhu? [-bBfFlLMrStVXyz]\n"
|
||||
"\t-cdDesvhu? [-bBfFGlLMrStVXyz]\n"
|
||||
"\t\t[-a BITS] [-A OBITS] [-i INIT] [-k KPOLY] [-m MODEL]\n"
|
||||
"\t\t[-p POLY] [-P RPOLY] [-q QPOLY] [-w WIDTH] [-x XOROUT]\n"
|
||||
"\t\t[STRING...]\n"
|
||||
|
@ -596,12 +599,13 @@ usage(void) {
|
|||
"\t-x XOROUT\tfinal register XOR value\n"
|
||||
"Modifier switches:\n"
|
||||
"\t-b big-endian CRC\t\t-B big-endian CRC output\n"
|
||||
"\t-f read files named in STRINGs\t-F find presets less quickly\n"
|
||||
"\t-l little-endian CRC\t\t-L little-endian CRC output\n"
|
||||
"\t-M non-augmenting algorithm\t-r right-justified output\n"
|
||||
"\t-S print spaces between chars\t-t left-justified output\n"
|
||||
"\t-V reverse algorithm only\t-X print uppercase hex\n"
|
||||
"\t-y low bytes first in files\t-z raw binary STRINGs\n");
|
||||
"\t-f read files named in STRINGs\t-F skip preset model check pass\n"
|
||||
"\t-G skip brute force search pass\t-l little-endian CRC\n"
|
||||
"\t-L little-endian CRC output\t-M non-augmenting algorithm\n"
|
||||
"\t-r right-justified output\t-S print spaces between characters\n"
|
||||
"\t-t left-justified output\t-V reverse algorithm only\n"
|
||||
"\t-X print uppercase hexadecimal\t-y low bytes first in files\n"
|
||||
"\t-z raw binary STRINGs\n");
|
||||
fprintf(stderr,
|
||||
"Mode switches:\n"
|
||||
"\t-c calculate CRCs\t\t-d dump algorithm parameters\n"
|
||||
|
@ -621,7 +625,7 @@ usage(void) {
|
|||
"\t Outputs a list of all known/common crc models with their\n"
|
||||
"\t preset values\n"
|
||||
"\n"
|
||||
"Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook\n"
|
||||
"Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Gregory Cook\n"
|
||||
"This is free software; see the source for copying conditions. There is NO\n"
|
||||
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
|
||||
"Version "
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* config.h
|
||||
* Greg Cook, 27/Jun/2016
|
||||
* Greg Cook, 7/Feb/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* model.c
|
||||
* Greg Cook, 26/Jul/2016
|
||||
* Greg Cook, 19/Feb/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
@ -21,7 +22,9 @@
|
|||
* along with CRC RevEng. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* 2016-02-22: split off preset.c
|
||||
/* 2017-02-19: revised residue calculation for crossed-endian models
|
||||
* 2017-02-05: added magic field
|
||||
* 2016-02-22: split off preset.c
|
||||
* 2012-03-03: single-line Williams model string conversion
|
||||
* 2011-09-03: added mrev(), mnovel()
|
||||
* 2011-01-17: fixed ANSI C warnings (except preset models)
|
||||
|
@ -54,6 +57,7 @@ mcpy(model_t *dest, const model_t *src) {
|
|||
pcpy(&dest->init, src->init);
|
||||
pcpy(&dest->xorout, src->xorout);
|
||||
pcpy(&dest->check, src->check);
|
||||
pcpy(&dest->magic, src->magic);
|
||||
dest->flags = src->flags;
|
||||
/* link to the name as it is static */
|
||||
dest->name = src->name;
|
||||
|
@ -67,6 +71,7 @@ mfree(model_t *model) {
|
|||
pfree(&model->init);
|
||||
pfree(&model->xorout);
|
||||
pfree(&model->check);
|
||||
pfree(&model->magic);
|
||||
/* not name as it is static */
|
||||
/* not model either, it might point to an array! */
|
||||
}
|
||||
|
@ -95,25 +100,28 @@ mtostr(const model_t *model) {
|
|||
* mcanon() should be called on the argument before printing.
|
||||
*/
|
||||
size_t size;
|
||||
char *polystr, *initstr, *xorotstr, *checkstr, strbuf[512], *string = NULL;
|
||||
char *polystr, *initstr, *xorotstr, *checkstr, *magicstr,
|
||||
strbuf[512], *string = NULL;
|
||||
|
||||
if(!model) return(NULL);
|
||||
polystr = ptostr(model->spoly, P_RTJUST, 4);
|
||||
initstr = ptostr(model->init, P_RTJUST, 4);
|
||||
xorotstr = ptostr(model->xorout, P_RTJUST, 4);
|
||||
checkstr = ptostr(model->check, P_RTJUST, 4);
|
||||
magicstr = ptostr(model->magic, P_RTJUST, 4);
|
||||
|
||||
sprintf(strbuf, "%lu", plen(model->spoly));
|
||||
size =
|
||||
70
|
||||
+ (model->name && *model->name ? 2 + strlen(model->name) : 6)
|
||||
82
|
||||
+ strlen(strbuf)
|
||||
+ (polystr && *polystr ? strlen(polystr) : 6)
|
||||
+ (initstr && *initstr ? strlen(initstr) : 6)
|
||||
+ (model->flags & P_REFIN ? 4 : 5)
|
||||
+ (model->flags & P_REFOUT ? 4 : 5)
|
||||
+ (xorotstr && *xorotstr ? strlen(xorotstr) : 6)
|
||||
+ (checkstr && *checkstr ? strlen(checkstr) : 6);
|
||||
+ (checkstr && *checkstr ? strlen(checkstr) : 6)
|
||||
+ (magicstr && *magicstr ? strlen(magicstr) : 6)
|
||||
+ (model->name && *model->name ? 2 + strlen(model->name) : 6);
|
||||
if((string = malloc(size))) {
|
||||
sprintf(strbuf, "\"%s\"", model->name);
|
||||
sprintf(string,
|
||||
|
@ -124,6 +132,7 @@ mtostr(const model_t *model) {
|
|||
"refout=%s "
|
||||
"xorout=0x%s "
|
||||
"check=0x%s "
|
||||
"residue=0x%s "
|
||||
"name=%s",
|
||||
plen(model->spoly),
|
||||
polystr && *polystr ? polystr : "(none)",
|
||||
|
@ -132,12 +141,14 @@ mtostr(const model_t *model) {
|
|||
(model->flags & P_REFOUT) ? "true" : "false",
|
||||
xorotstr && *xorotstr ? xorotstr : "(none)",
|
||||
checkstr && *checkstr ? checkstr : "(none)",
|
||||
magicstr && *magicstr ? magicstr : "(none)",
|
||||
(model->name && *model->name) ? strbuf : "(none)");
|
||||
}
|
||||
free(polystr);
|
||||
free(initstr);
|
||||
free(xorotstr);
|
||||
free(checkstr);
|
||||
free(magicstr);
|
||||
if(!string)
|
||||
uerror("cannot allocate memory for model description");
|
||||
return(string);
|
||||
|
@ -166,23 +177,42 @@ mcanon(model_t *model) {
|
|||
* might be noticed. Storing the Check value with each preset
|
||||
* is highly preferred.
|
||||
*/
|
||||
if(!plen(model->check))
|
||||
if(!(plen(model->check) && plen(model->magic)))
|
||||
mcheck(model);
|
||||
}
|
||||
|
||||
void
|
||||
mcheck(model_t *model) {
|
||||
/* calculate a check for the model */
|
||||
poly_t checkstr, check;
|
||||
poly_t checkstr, check, xorout, magic;
|
||||
|
||||
/* erase existing check and magic. Models with these
|
||||
* fields recalculated should have no name.
|
||||
*/
|
||||
mnovel(model);
|
||||
|
||||
/* generate the check string with the correct bit order */
|
||||
checkstr = strtop("313233343536373839", model->flags, 8);
|
||||
check = pcrc(checkstr, model->spoly, model->init, pzero, model->flags);
|
||||
pfree(&checkstr);
|
||||
if(model->flags & P_REFOUT)
|
||||
prev(&check);
|
||||
psum(&check, model->xorout, 0UL);
|
||||
model->check = check;
|
||||
pfree(&checkstr);
|
||||
|
||||
/* calculate residue by emulating receipt of error-free message
|
||||
* The residue of a crossed-endian model is calculated assuming
|
||||
* that the characters of the received CRC are specially
|
||||
* reflected before submitting the codeword.
|
||||
*/
|
||||
xorout=pclone(model->xorout);
|
||||
if(model->flags & P_REFOUT)
|
||||
prev(&xorout);
|
||||
magic = pcrc(xorout, model->spoly, pzero, pzero, model->flags);
|
||||
pfree(&xorout);
|
||||
if(model->flags & P_REFIN)
|
||||
prev(&magic);
|
||||
model->magic = magic;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -221,4 +251,5 @@ mnovel(model_t *model) {
|
|||
/* remove name and check string from modified model */
|
||||
model->name = NULL;
|
||||
pfree(&model->check);
|
||||
pfree(&model->magic);
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* poly.c
|
||||
* Greg Cook, 26/Jul/2016
|
||||
* Greg Cook, 7/Feb/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
@ -640,6 +641,7 @@ pshift(poly_t *dest, const poly_t src, unsigned long head, unsigned long start,
|
|||
/* copies bits start to end-1 of src to dest, plus the number of leading and trailing zeroes given by head and tail.
|
||||
* end may exceed the length of src in which case more zeroes are appended.
|
||||
* dest may point to src, in which case the poly is edited in place.
|
||||
* src must be CLEAN.
|
||||
* On exit, dest is CLEAN.
|
||||
*/
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,10 @@
|
|||
/* reveng.c
|
||||
* Greg Cook, 27/Jun/2016
|
||||
* Greg Cook, 7/Feb/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
@ -151,6 +152,7 @@ requit:
|
|||
rptr->flags = 0;
|
||||
rptr->xorout = pzero;
|
||||
rptr->check = pzero;
|
||||
rptr->magic = pzero;
|
||||
rptr->name = NULL;
|
||||
|
||||
return(result);
|
||||
|
@ -446,7 +448,7 @@ static void
|
|||
chkres(int *resc, model_t **result, const poly_t divisor, const poly_t init, int flags, const poly_t xorout, int args, const poly_t *argpolys) {
|
||||
/* Checks a model against the argument list, and adds to the
|
||||
* external results table if consistent.
|
||||
* Extends the result array and update the external pointer if
|
||||
* Extends the result array and updates the external pointer if
|
||||
* necessary.
|
||||
*/
|
||||
model_t *rptr;
|
||||
|
@ -484,6 +486,8 @@ chkres(int *resc, model_t **result, const poly_t divisor, const poly_t init, int
|
|||
rptr->init = pclone(init);
|
||||
rptr->flags = flags;
|
||||
rptr->xorout = pclone(xorout);
|
||||
rptr->check = pzero;
|
||||
rptr->magic = pzero;
|
||||
rptr->name = NULL;
|
||||
|
||||
/* compute check value for this model */
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* reveng.h
|
||||
* Greg Cook, 25/Jul/2016
|
||||
* Greg Cook, 19/Jun/2017
|
||||
*/
|
||||
|
||||
/* CRC RevEng: arbitrary-precision CRC calculator and algorithm finder
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook
|
||||
* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
|
||||
* Gregory Cook
|
||||
*
|
||||
* This file is part of CRC RevEng.
|
||||
*
|
||||
|
@ -92,7 +93,7 @@
|
|||
/* Global definitions */
|
||||
|
||||
/* CRC RevEng version string */
|
||||
#define VERSION "1.4.4"
|
||||
#define VERSION "1.5.2"
|
||||
|
||||
/* bmpbit.c */
|
||||
typedef BMP_T bmp_t;
|
||||
|
@ -162,12 +163,17 @@ extern int pmpar(const poly_t poly, const poly_t mask);
|
|||
extern int pident(const poly_t a, const poly_t b);
|
||||
|
||||
/* model.c */
|
||||
|
||||
/* A model_t constant representing an uninitialised model or zero-bit CRC algorithm. */
|
||||
#define MZERO {PZERO, PZERO, P_BE, PZERO, PZERO, PZERO, NULL}
|
||||
|
||||
typedef struct {
|
||||
poly_t spoly; /* polynomial with highest-order term removed. length determines CRC width */
|
||||
poly_t init; /* initial register value. length == poly.length */
|
||||
poly_t init; /* initial register value. length == spoly.length */
|
||||
int flags; /* P_REFIN and P_REFOUT indicate reflected input/output */
|
||||
poly_t xorout; /* final register XOR mask. length == poly.length */
|
||||
poly_t xorout; /* final register XOR mask. length == spoly.length */
|
||||
poly_t check; /* optional check value, the CRC of the UTF-8 string "123456789" */
|
||||
poly_t magic; /* optional magic check value, the residue of a valid codeword */
|
||||
const char *name; /* optional canonical name of the model */
|
||||
} model_t;
|
||||
|
||||
|
@ -203,8 +209,9 @@ extern model_t *reveng(const model_t *guess, const poly_t qpoly, int rflags, int
|
|||
|
||||
/* cli.c */
|
||||
#define C_INFILE 1
|
||||
#define C_FORCE 2
|
||||
#define C_RESULT 4
|
||||
#define C_NOPCK 2
|
||||
#define C_NOBFS 4
|
||||
#define C_RESULT 8
|
||||
|
||||
#define BUFFER 32768
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue