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 e346b4eb971b273cbb088200d1eee41448a1bb08
parent 02088322ebb2bdffbcf3bf9464d86c5e385dcfa4
Author: Louis Burda <quent.burda@gmail.com>
Date:   Mon, 31 May 2021 20:24:08 +0200

fix checker do_auth, add hashing to revhash for comparing

Diffstat:
Mchecker/src/checker.py | 2+-
Mchecker/src/revhash/main.c | 50++++++++++++++++++++++++++++++++++++++++++--------
2 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/checker/src/checker.py b/checker/src/checker.py @@ -69,7 +69,7 @@ class STLDoctorChecker(BaseChecker): def do_auth(self, conn, authstr): conn.write("auth\n") - conn.write(authstr + b"\n") + conn.write(authstr + "\n") resp = conn.recvuntil(self.prompt) authstr = ensure_bytes(authstr) assert_in(b"Success!", resp, f"Login with pass {authstr} failed"); diff --git a/checker/src/revhash/main.c b/checker/src/revhash/main.c @@ -4,22 +4,42 @@ #include <stdint.h> #define MAXITER 256 * 100 +#define MHASHLEN 40 #define MAX(x,y) ((x) > (y) ? (x) : (y)) #define MIN(x,y) ((x) < (y) ? (x) : (y)) int -main(int argc, const char **argv) +hash() { - const char *hashstr; - char c, hexbuf[3] = { 0 }, *end, *buf; - int i, k, v, maxlen, sum, *hash, sublen, aftersum; + static char buf[MHASHLEN + 1]; + char str[256]; + int i, k, v; + char c, *bp; + size_t len; - if (argc < 2) { - fprintf(stderr, "USAGE: revhash <hash>\n"); + if (!fgets(str, sizeof(str), stdin)) return EXIT_FAILURE; - } - hashstr = argv[1]; + len = strlen(str) -1; + if (len <= 0) return EXIT_FAILURE; + + for (v = 0, i = 0; i < len; i++) v += str[i]; + + srand(v); + for (bp = buf, i = 0; i < MHASHLEN / 2; i++) + bp += sprintf(bp, "%02x", str[i % len] ^ (rand() % 256)); + + printf("%s\n", buf); + + return EXIT_SUCCESS; +} + +int +revhash(const char *hashstr) +{ + char c, hexbuf[3] = { 0 }, *end, *buf; + int i, k, v, maxlen, sum, *hash, sublen, aftersum; + if (strlen(hashstr) % 2 != 0) goto invalid; @@ -78,3 +98,17 @@ invalid: fprintf(stderr, "Invalid hash string!\n"); return EXIT_FAILURE; } + +int +main(int argc, const char **argv) +{ + if (argc < 2) { + fprintf(stderr, "USAGE: revhash <hash>\n"); + return EXIT_FAILURE; + } + + if (!strcmp(argv[1], "hash")) + return hash(); + else + return revhash(argv[1]); +}