summaryrefslogtreecommitdiffstats
path: root/src/libluh.c
blob: 4f25e538d8465f73d820e42357c1a88d7cd47a21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "libluh.h"

char* readInput (FILE* inputFile, uint64_t allocSize) {

	int64_t character;
	uint64_t length = 0;
	char* input;

	input = malloc (sizeof (char) * allocSize);

	while (EOF != (character = fgetc (inputFile))) {
		input[length++] = character;
		if (length == allocSize) {
			input = realloc (input, sizeof (char) * (allocSize += 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;
}

int qprintf (int isQuiet, const char* printStr, ...) {

	int ret;

	if (!isQuiet) {
		va_list args;
		va_start(args, printStr);
		ret = vprintf (printStr, args);
		va_end(args);
	}

	return ret;
}