commit f7f68e7b2d0bd82102f970921c07129577effc81 from: Evan Burkey date: Sat Jun 15 22:56:50 2024 UTC continue work on 1-6 commit - 5d4bf996c2269da571c3da298fcd05356438ba0b commit + f7f68e7b2d0bd82102f970921c07129577effc81 blob - 30a3437f7dbbae6a26bbd0013f5df371fd29661c blob + de05d1687701fdd4d4136d226714ac977308c085 --- Makefile +++ Makefile @@ -1,6 +1,8 @@ -CMAKE_OPTS=-DCMAKE_EXPORT_COMPILE_COMMANDS=1 +CMAKE_OPTS=-DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_BUILD_TYPE=Debug -all: +all: clean run + +build: mkdir -p build cd build && \ cmake ${CMAKE_OPTS} .. && \ @@ -10,3 +12,7 @@ all: clean: rm -rf build rm -f compile_commands.json + +run: build + build/cryptopals + blob - 1aa195f21ea2750734545f01ac4d14ca3f5072a1 blob + 5ada94d6edf3bac87306776777c1a95ccb098c56 --- src/set1.c +++ src/set1.c @@ -2,8 +2,10 @@ #include #include #include +#include #include "lfcrypto.h" +#include "lfvector.h" #include "lfinput.h" #include "lfparsing.h" #include "helpers.h" @@ -98,8 +100,64 @@ static void challenge5() { free(answer); } +static void challenge6_vecdestroy(void *v) { + if (v == NULL) { + return; + } + vec_destroy((Vector *)v); + free(v); +} + static void challenge6() { + char *input = get_input("input/1-6"); + size_t encoded_sz = 0; + unsigned char *encoded = b64_decode(input, strlen(input), &encoded_sz); + + unsigned int smallest = UINT_MAX; + size_t keysize = 0; + for (size_t k = 2; k <= 20; ++k) { + char a[41], b[41]; + strncpy(a, encoded, k); + strncpy(b, encoded + k, k); + unsigned int hd = hamming_distance_s(a, b) / (unsigned int)keysize; + if (hd < smallest) { + smallest = hd; + keysize = k; + } + } + /* + for (unsigned char *c = encoded; *c != '\0'; ++c) { + printf("%02x", *c); + } + printf("\n"); + */ + /* + + Vector *vec = malloc(sizeof(Vector)); + vec_init(vec, challenge6_vecdestroy); + + // Account for remainders + size_t vec_sz = encoded_sz / keysize; + if (encoded_sz % keysize != 0) { + ++vec_sz; + } + for (size_t i = 0; i < vec_sz; ++i) { + Vector *vec_t = malloc(sizeof(Vector)); + vec_init(vec_t, free); + vec_push(vec, (void *)vec_t); + } + + for (size_t i = 0; i < encoded_sz; ++i) { + unsigned char *c = malloc(sizeof(unsigned char)); + *c = encoded[i]; + vec_at(vec, i % keysize) = c; + } + + vec_destroy(vec); + */ + free(encoded); + free(input); } void set1() {