Commit Diff


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 <stdlib.h>
 #include <limits.h>
 #include <string.h>
+#include <limits.h>
 
 #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() {