diff options
Diffstat (limited to 'lib/lib.c')
| -rw-r--r-- | lib/lib.c | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -471,3 +471,54 @@ char brute_force_single_byte_xor(char *string, int length, struct key_and_freq * return key; } + + +/** + * reads a base64 an decode it + * @param file path of the file + * @param out writes file in this buffer, allocated by this method + */ +int read_base64_file(const char *file, char **out) +{ + char ch; + FILE *fp; + int file_size = 60; + char *new_file_content; + int file_pos = 0; + + fp = fopen(file, "r"); + + if (fp == NULL) { + printf("Error open file\n"); + exit(1); + } + + *out = malloc(file_size); + + if (*out == NULL) { + perror("out of memory"); + exit(1); + } + + // read data and decode it from base64 + while ( (ch = fgetc(fp)) != EOF) { + // ignore new lines as this is part of base64 + if (ch == '\n' || ch == '\r') + continue; + + if (file_pos+1 >= file_size) { + new_file_content = realloc(*out, (file_size+60)); + if (new_file_content != NULL) { + *out = new_file_content; + file_size += 60; + } + else { + printf("error allocating memory\n"); + exit(1); + } + } + (*out)[file_pos++] = ch; + } + return file_pos; + +} |
