X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/f53020e729d583f7975095ca7b4b467741d99edb..b62cbadb6198fcfcf7b6787acac01b5b7262eea6:/client/reveng/poly.c diff --git a/client/reveng/poly.c b/client/reveng/poly.c index 1e22b8d2..64e4a2db 100644 --- a/client/reveng/poly.c +++ b/client/reveng/poly.c @@ -1,9 +1,9 @@ /* poly.c - * Greg Cook, 9/Apr/2015 + * Greg Cook, 24/Feb/2016 */ /* CRC RevEng, an arbitrary-precision CRC calculator and algorithm finder - * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015 Gregory Cook + * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Gregory Cook * * This file is part of CRC RevEng. * @@ -21,7 +21,8 @@ * along with CRC RevEng. If not, see . */ -/* 2015-04-03: added direct mode to strtop() +/* 2015-07-29: discard leading $, &, 0x from argument to strtop() + * 2015-04-03: added direct mode to strtop() * 2014-01-11: added LOFS(), RNDUP() * 2013-09-16: SIZE(), IDX(), OFS() macros bitshift if BMP_POF2 * 2013-02-07: conditional non-2^n fix, pmpar() return mask constant type @@ -139,7 +140,7 @@ filtop(FILE *input, unsigned long length, int flags, int bperhx) { bmp_t accu = BMP_C(0); bmp_t mask = bperhx == BMP_BIT ? ~BMP_C(0) : (BMP_C(1) << bperhx) - BMP_C(1); unsigned long iter = 0UL, idx; - int cmask = ~(~0 << CHAR_BIT), c; + int cmask = (1 << CHAR_BIT) - 1, c; int count = 0, ofs; poly_t poly = PZERO; if(bperhx == 0) return(poly); @@ -204,13 +205,22 @@ strtop(const char *string, int flags, int bperhx) { bmp_t accu; bmp_t mask = bperhx == BMP_BIT ? ~BMP_C(0) : (BMP_C(1) << bperhx) - BMP_C(1); int pass, count, ofs; - int cmask = ~(~0 << CHAR_BIT), c; + int cmask = (1 << CHAR_BIT) - 1 , c; const char *s; poly_t poly = PZERO; if(bperhx > BMP_BIT || bperhx <= 0 || string == NULL || *string == '\0') return(poly); + if(~flags & P_DIRECT) { + if(*string == '$' || *string == '&') + ++string; + else if(*string == '0' + && (string[1] == 'x' || string[1] == 'X')) + string += 2; + } + length = (*string != '\0'); + for(pass=0; pass<2 && length > 0UL; ++pass) { s = string; length = 0UL;