aboutsummarylogtreecommitdiffstats
path: root/rc4.c
diff options
context:
space:
mode:
authorAntony Kellermann2018-02-16 12:37:25 -0500
committerAntony Kellermann2018-02-16 12:37:25 -0500
commit90d3c972140b715f0f6a2fcd987dcf0576957a35 (patch)
treee9e60423a57768e540af2d21f6a94a1f33e2b12f /rc4.c
parent770288874b983861476b2865b1a9069e460e3228 (diff)
downloadaur-90d3c972140b715f0f6a2fcd987dcf0576957a35.tar.gz
Added rc4 files to project
Diffstat (limited to 'rc4.c')
-rw-r--r--rc4.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/rc4.c b/rc4.c
new file mode 100644
index 000000000000..d1d7267214ce
--- /dev/null
+++ b/rc4.c
@@ -0,0 +1,56 @@
+#include <ncurses.h>
+#include <stdlib.h>
+#include "rc4.h"
+
+#define PASS_MAX 32
+#define BACKSPACE 127
+
+char* getPassword() {
+ unsigned char* pass = calloc(PASS_MAX, sizeof(char));
+ initscr();
+ noecho();
+ unsigned int c, i = 0;
+ printw("Enter Password: ");
+ while ((c = (unsigned)getch()) && c != '\n' && i <= PASS_MAX) {
+ if (c != BACKSPACE) {
+ pass[i] = (char) c;
+ i++;
+ } else if (i > 0)
+ pass[i - 1] = '\0';
+ }
+ endwin();
+ return (char*)pass;
+}
+
+void keyExchange(int keySchedule[], int len, const unsigned char* key) {
+ int j = 0;
+ for (int i = 0; i < 256; ++i)
+ keySchedule[i] = i;
+ for (int i = 0; i < 256; ++i) {
+ j = (j + keySchedule[i] + key[i % len]) % 256;
+ int temp = keySchedule[i];
+ keySchedule[i] = keySchedule[j];
+ keySchedule[j] = temp;
+ }
+}
+
+char* prga(int keySchedule[], int len) {
+ int i = 0;
+ int j = 0;
+ char* output = (char*) malloc((size_t)len);
+ for (int k = 0; k < len; ++k) {
+ i = (i + 1) % 256;
+ j = (j + keySchedule[i]) % 256;
+ int temp = keySchedule[i];
+ keySchedule[i] = keySchedule[j];
+ keySchedule[j] = temp;
+ output[k] = (unsigned char) keySchedule[(keySchedule[i] + keySchedule[j]) % 256];
+ }
+ return output;
+}
+
+void rc4(const unsigned char output[], const unsigned char message[], FILE* out, long int len) {
+ for (int i = 0; i < len; ++i)
+ fprintf(out, "%c", output[i] ^ message[i]);
+ printf("\n");
+} \ No newline at end of file