diff --git a/Makefile b/Makefile index 30a3437..de05d16 100644 --- a/Makefile +++ b/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 + diff --git a/lib/libflint b/lib/libflint index 0318221..a99d1d3 160000 --- a/lib/libflint +++ b/lib/libflint @@ -1 +1 @@ -Subproject commit 0318221f3ff621ba046eb8b4385f07e790912cdb +Subproject commit a99d1d3784eebf2400653df97968a5584f1e20d8 diff --git a/src/set1.c b/src/set1.c index 1aa195f..5ada94d 100644 --- a/src/set1.c +++ b/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() { +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() {