c-uebungen/Assignment_007/solution/main.c

72 lines
1.4 KiB
C
Raw Permalink Normal View History

2023-05-21 21:10:46 +02:00
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "crypto.h"
#include <errno.h>
#define BUFFER_SIZE 255
int main(int argc, char** argv) {
/* encrypt or decrypt function */
int (*func)(KEY, const char*, char*);
if (argc < 2) {
fprintf(stderr, "Usage: KEY [file name]\n\n");
exit(1);
}
if (strstr(argv[0], "encrypt")) {
func = encrypt;
}
else if (strstr(argv[0], "decrypt")) {
func = decrypt;
}
else {
func = encrypt;
}
KEY key;
key.type = 1;
key.chars = argv[1];
FILE* f;
if (argc == 3) {
char *file = argv[2];
if (!(f = fopen(file, "r"))) {
fprintf(stderr, "Could not open %s: %s\n", file, strerror(errno));
exit(1);
}
}
else {
f = stdin;
}
char buffer[BUFFER_SIZE];
char result[BUFFER_SIZE];
while (fgets(buffer, BUFFER_SIZE - 1, f)) {
/* remove newline character at the end of line */
char* lineEnd = strchr(buffer, 10);
if (lineEnd) {
*lineEnd = '\0';
}
/* encrypt or decrypt */
int error = func(key, buffer, result);
if (error) {
fprintf(stderr, "Error: %d\n", error);
exit(error);
}
printf("%s\n", result);
}
if (argc == 3) {
fclose(f);
}
return 0;
}