#include "../include/decrypter.h" #include #include #include #include "../include/flags.h" char* decryptText(char *text, char *key) { //CHECK FOR INVALID key if (strlen(key) != KEY_LENGTH) { fprintf(stderr, "Key must be 50 characters long!\n"); exit(INVALID_KEY); } //VARIABLES char *returningText; int numberBuffer; char *textBuffer; numberBuffer = 1; //GET LENGTH OF returningText AND textKeyChain for (int i = 0; i < strlen(text); i++) { if (text[i] == ENCRYPTION_SEPARATOR) numberBuffer++; } //SET LENGTH returningText = malloc(numberBuffer); int textKeyChain[numberBuffer]; int encryptedTextKeyChain[numberBuffer]; //LOAD textKeyChain for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++) { numberBuffer = i; //CHECK, IF numberBuffer ISN'T GREATER THAN KEY_LENGTH AND CUT UNUSED LENGTH while (numberBuffer >= KEY_LENGTH) { numberBuffer -= KEY_LENGTH; } //FILL textKeyChain if ((numberBuffer + 1) % 3 == 0) { textKeyChain[i] = key[numberBuffer] * key[numberBuffer + 1]; } else if ((numberBuffer + 1) % 2 == 0) { textKeyChain[i] = key[numberBuffer] - key[numberBuffer + 1]; } else { textKeyChain[i] = key[numberBuffer] + key[numberBuffer + 1]; } } //LOAD encryptedTextKeyChain for (int i = 0; i < (sizeof(encryptedTextKeyChain) / sizeof(int)); i++) { numberBuffer = 0; //GET LENGTH OF EACH CHARACTER for (int j = 0; j < strlen(text); j++) { if (text[j] == ENCRYPTION_SEPARATOR) break; numberBuffer++; } textBuffer = malloc(numberBuffer); //LOAD textBuffer for (int j = 0; j < strlen(text); j++) { textBuffer[j] = text[j]; if (numberBuffer == j) break; } encryptedTextKeyChain[i] = atoi(textBuffer); text += numberBuffer + 1; free(textBuffer); } //DECRYPT TEXT for (int i = 0; i < (sizeof(textKeyChain) / sizeof(int)); i++) { textKeyChain[i] -= encryptedTextKeyChain[i]; } //LOAD returningText for (int i = 0; i < sizeof(textKeyChain) / sizeof(int); i++) { returningText[i] = (char) textKeyChain[i]; } return returningText; }