commit - 5d4bf996c2269da571c3da298fcd05356438ba0b
commit + f7f68e7b2d0bd82102f970921c07129577effc81
blob - 30a3437f7dbbae6a26bbd0013f5df371fd29661c
blob + de05d1687701fdd4d4136d226714ac977308c085
--- Makefile
+++ Makefile
-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} .. && \
clean:
rm -rf build
rm -f compile_commands.json
+
+run: build
+ build/cryptopals
+
blob - 1aa195f21ea2750734545f01ac4d14ca3f5072a1
blob + 5ada94d6edf3bac87306776777c1a95ccb098c56
--- src/set1.c
+++ src/set1.c
#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"
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() {