From 11b2ff584c67cf85ebe2405f6a74ab2799736927 Mon Sep 17 00:00:00 2001 From: Benedict Date: Thu, 4 Aug 2016 14:28:15 +0200 Subject: completed set3, task 18 --- lib/lib3.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/lib3.h | 16 ++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 lib/lib3.c create mode 100644 lib/lib3.h (limited to 'lib') diff --git a/lib/lib3.c b/lib/lib3.c new file mode 100644 index 0000000..87865ed --- /dev/null +++ b/lib/lib3.c @@ -0,0 +1,83 @@ +#include "lib3.h" +#include "lib2.h" +#include "lib.h" + + +#define NR_STIRNGS_CHALLENGE17 10 + +char *challenge17_encrypt(int *length) +{ + int i, t; + char **string; + char **decoded; + string = malloc(sizeof(char *)*NR_STIRNGS_CHALLENGE17); + decoded = malloc(sizeof(char *)*NR_STIRNGS_CHALLENGE17); + char filename[] = "task17_0"; + + for(i=0;i<10;i++) { + filename[strlen(filename)-1] = (char) (i+'0'); + t = read_base64_file(filename, &string[i]); + decoded[i] = malloc(t); + length[i] = decode_base64(string[i], decoded[i]); + printf("read: %s\n", string[i]); + } + // choose one randomly + int random = rand() % NR_STIRNGS_CHALLENGE17; + int padding; + printf("plaintext: %s\n", string[random]); + *length = strlen(string[random]); + char *padded_string = __pkcs7_padding(string[random], *length, 16, &padding); + char *encrypted = malloc(strlen(padded_string)); + *length += padding; + aes_cbc(padded_string, strlen(padded_string), encrypted, key, iv, 1); + return encrypted; +} + +int cbc_padding_oracle(char *encrypted, int length) +{ + char *decrypted = malloc(length); + char *unpadded= malloc(length); + + aes_cbc(encrypted, length, decrypted, key, iv, 0); + + int valid = valid_pkcs7_padding(decrypted, length, unpadded, 16); + free(decrypted); + free(unpadded); + return valid; + +} + +int convert_to_little_endian(char *string) +{ + +} +/** + * format is: 64 nonce concat with 64 bit counter + * calle has to make sure that nonce is at least 8 bytes + * its all little endian + */ +int aes_ctr(char *in, int length_in, char *out, char *string_key, char *nonce) +{ + long counter; + unsigned char tmp[16]; + char keystream[16]; + long nr_blocks = length_in / BLOCKSIZE; + int length_last_block = length_in % BLOCKSIZE; + memcpy(tmp, nonce, 16); + + for(counter=0;counter +#include +#include +#include + +#define BLOCKSIZE 16 + +char *challenge17_encrypt(int *length); +int cbc_padding_oracle(char *encrypted, int length); +int aes_ctr(char *in, int length_in, char *out, char *string_key, char *nonce); + + +#endif -- cgit v1.2.3-70-g09d2