diff options
Diffstat (limited to 'src/libluh.c')
-rw-r--r-- | src/libluh.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/libluh.c b/src/libluh.c new file mode 100644 index 0000000..b7412b4 --- /dev/null +++ b/src/libluh.c @@ -0,0 +1,105 @@ +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include "libluh.h" + +char* readInput (FILE* stdinput, uint64_t size) { + + int64_t character; + uint64_t length = 0; + char* input; + + input = malloc (sizeof (char) * size); + + while (EOF != (character = fgetc (stdinput))) { + input[length++] = character; + if (length == size) { + input = realloc (input, sizeof (char) * (size += 8)); + } + } + + input[length++] = '\0'; + + return realloc (input, sizeof (char) * length); +} + +char* cryptXor (char* inputStr, FILE* keyFile) { + + int64_t i; + char in1, in2; + int64_t inputSize = strlen (inputStr); + char* bytes = malloc (inputSize); + + fseek (keyFile, 0L, SEEK_END); + int64_t keySize = ftell (keyFile); + fseek (keyFile, (keySize - inputSize), SEEK_SET); + + for (i = 0; i < inputSize; i ++) { + in1 = inputStr[i]; + fscanf (keyFile, "%c", &in2); + bytes[i] = in1 ^ in2; + } + + return bytes; +} + +char* fcryptXor (FILE* inputFile, FILE* keyFile) { + + int64_t i; + char in1, in2; + + fseek (inputFile, 0L, SEEK_END); + int64_t inputSize = ftell (inputFile); + rewind (inputFile); + + char* bytes = malloc (inputSize); + + fseek (keyFile, 0L, SEEK_END); + int64_t keySize = ftell (keyFile); + fseek (keyFile, (keySize - inputSize), SEEK_SET); + + for (i = 0; i < inputSize; i ++) { + fscanf (inputFile, "%c", &in1); + fscanf (keyFile, "%c", &in2); + bytes[i] = in1 ^ in2; + } + + return bytes; +} + +char* binDump (char* inputStr, char* binChars) { + + int64_t len = strlen (inputStr); + char* bits = malloc (8 * len); + + int64_t i,j; + + for (i = 0; i < len; i ++) { + for (j = 0; j < 8; j ++) { + bits[8 * i + j] = (inputStr[i] & (1 << (7 -j))) ? binChars[1] : binChars[0]; + } + } + + return bits; +} + +char* ubinDump (char* inputStr, char* binChars) { + + int64_t len = strlen (inputStr); + char* comp = malloc ((len / 8) + 1); + + memset (comp, 0, ((len / 8) + 1)); + + int64_t i, j; + + for (i = 0; i < (len / 8); i ++) { + for (j = 0; j < 8; j ++) { + if (inputStr[8 * i + j] == binChars[1]) { + comp[i] |= 1 << (7 - j); + } + } + } + + return comp; +} |