enowars5-service-stldoctor

STL-Analyzing A/D Service for ENOWARS5 in 2021
git clone https://git.sinitax.com/sinitax/enowars5-service-stldoctor
Log | Files | Refs | README | LICENSE | sfeed.txt

commit d296a0c73787537ad9ea087f213083f29fbd6f8f
parent ced5bcb273a17a31058dd58ab413f7c83cfe4508
Author: Louis Burda <quent.burda@gmail.com>
Date:   Mon, 31 May 2021 21:29:50 +0200

fix bug in revhash that generated false preimages

Diffstat:
Mchecker/src/revhash/main.c | 36++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/checker/src/revhash/main.c b/checker/src/revhash/main.c @@ -9,18 +9,12 @@ #define MIN(x,y) ((x) < (y) ? (x) : (y)) int -hash() +mhash(const char *str, size_t len) { static char buf[MHASHLEN + 1]; - char str[256]; int i, k, v; char c, *bp; - size_t len; - - if (!fgets(str, sizeof(str), stdin)) - return EXIT_FAILURE; - len = strlen(str) -1; if (len <= 0) return EXIT_FAILURE; for (v = 0, i = 0; i < len; i++) v += str[i]; @@ -35,19 +29,26 @@ hash() } int +hash() +{ + char str[256]; + size_t len; + + if (!fgets(str, sizeof(str), stdin)) + return EXIT_FAILURE; + + return mhash(str, strlen(str) - 1); +} + +int revhash(const char *hashstr) { - char c, hexbuf[3] = { 0 }, *end, *buf; - int i, k, v, maxlen, sum, *hash, sublen, aftersum; + char c, hexbuf[3] = { 0 }, *end, buf[256]; + int i, k, v, maxlen, sum, hash[256], sublen, aftersum; if (strlen(hashstr) % 2 != 0) goto invalid; - - /* alloc */ maxlen = strlen(hashstr) / 2; - hash = calloc(maxlen, sizeof(int)); - buf = malloc(strlen(hashstr)); - if (!hash) return EXIT_FAILURE; /* convert hex to int array */ for (i = 0; i < maxlen; i++) { @@ -74,6 +75,8 @@ revhash(const char *hashstr) buf[k] = (char) hash[k] ^ (rand() % 256); if (buf[k] < 0 || buf[k] != buf[k % sublen]) break; } + } else { + sublen = maxlen; } if (k < maxlen) continue; @@ -86,9 +89,14 @@ revhash(const char *hashstr) c = MIN(127, sum); printf("%c", c); sum -= c; + buf[k++] = c; } printf("\n"); + + if (getenv("OUTPUT_HASH")) + mhash(buf, k); + return EXIT_SUCCESS; }