summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2011-02-18 21:02:38 -0600
committerKamil Kaminski <kamilkss@gmail.com>2011-02-18 21:02:38 -0600
commit4875a6cf6a7f01c775df6ff70f7dd1116429d8f4 (patch)
tree4d24a197d17e816c127665bbd230ee47526f1044
parent2d1eb462fe119d34568e1652b8107fd552c15025 (diff)
downloadrsacrypt-4875a6cf6a7f01c775df6ff70f7dd1116429d8f4.tar.gz
rsacrypt-4875a6cf6a7f01c775df6ff70f7dd1116429d8f4.tar.bz2
rsacrypt-4875a6cf6a7f01c775df6ff70f7dd1116429d8f4.zip
crypt works
-rw-r--r--Makefile12
-rw-r--r--crypt.cpp77
-rw-r--r--crypt.h2
-rw-r--r--crypt_args.cpp9
-rw-r--r--keygen.cpp5
-rw-r--r--keygen_args.cpp4
6 files changed, 91 insertions, 18 deletions
diff --git a/Makefile b/Makefile
index f41a87e..bc15f74 100644
--- a/Makefile
+++ b/Makefile
@@ -9,6 +9,9 @@
BINS = keygen crypt
OBJS1 = keygen.o keygen_args.o miller_rabin.o
OBJS2 = crypt.o crypt_args.o
+BIGINT_OBJS = ./bigint/BigUnsigned.o ./bigint/BigInteger.o \
+ ./bigint/BigIntegerAlgorithms.o ./bigint/BigUnsignedInABase.o \
+ ./bigint/BigIntegerUtils.o
CC = g++
DBGFLAGS = -g -O0
ifdef DEBUG
@@ -20,8 +23,8 @@ LDFLAGS = -lm
all: $(BINS)
-crypt: $(OBJS2)
- $(CC) $(LDFLAGS) $(OBJS2) -o crypt
+crypt: $(OBJS2) bigint
+ $(CC) $(LDFLAGS) $(OBJS2) $(BIGINT_OBJS) -o crypt
keygen: $(OBJS1)
$(CC) $(LDFLAGS) $(OBJS1) -o keygen
@@ -41,7 +44,10 @@ keygen_args.o: %.o: %.cpp %.h
miller_rabin.o: %.o: %.cpp %.h
$(CC) -c $(CFLAGS) $<
-.PHONY: clean
+bigint:
+ cd ./bigint && make && cd ..
+
+.PHONY: clean bigint
clean:
rm -f $(OBJS1) $(OBJS2) $(BINS) *.xml
diff --git a/crypt.cpp b/crypt.cpp
index e72bd97..5f0d01d 100644
--- a/crypt.cpp
+++ b/crypt.cpp
@@ -5,7 +5,10 @@
*/
#include "crypt.h"
+
+#ifndef DEBUG
#define DEBUG
+#endif
/* forward declaration of variables from crypt_args.h */
extern char *fname;
@@ -23,8 +26,8 @@ struct rsakey_t parse_key(FILE *file)
struct rsakey_t key = { 0, 0, 0};
/* used for line reading */
- size_t line_sz = 80;
- char *line = (char *) malloc(sizeof(char) * line_sz);
+ size_t line_sz = 0;
+ char *line = NULL;
while (getline(&line, &line_sz, file) != -1)
{
@@ -33,7 +36,9 @@ struct rsakey_t parse_key(FILE *file)
sscanf(line, "\t<nvalue>%lu</nvalue>\n", &key.n);
}
- free(line);
+ if (line)
+ free(line);
+
return key;
}
@@ -53,8 +58,15 @@ int main(int argc, char **argv)
FILE *fname_fl = fopen(fname, "r");
FILE *keyfname_fl = fopen(keyfname, "r");
FILE *outfname_fl = fopen(outfname, "w");
- if (fname_fl == NULL || keyfname_fl == NULL || outfname_fl == NULL)
- {
+ if (fname_fl == NULL) {
+ fprintf(stderr, "fopen: \"%s\", %s\n", fname, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (keyfname_fl == NULL) {
+ fprintf(stderr, "fopen: \"%s\", %s\n", keyfname, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (outfname_fl == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
@@ -80,6 +92,61 @@ int main(int argc, char **argv)
exit(EXIT_FAILURE);
}
+ if (mode == 0) /* encrypt */
+ {
+ char *line = NULL;
+ size_t len = 0;
+ ssize_t read;
+
+ unsigned int readin = 0;
+ BigUnsigned calc = 0;
+ string writeout;
+ const char *outstr = NULL;
+ while ((read = getline(&line, &len, fname_fl)) != -1)
+ {
+ sscanf(line, "%u\n", &readin);
+ printf("read in: \"%u\"", readin);
+ calc = modexp(BigUnsigned(readin), key.e, key.n);
+ writeout = bigIntegerToString(calc);
+ cout << ", encrypted: " << writeout << endl;
+ outstr = writeout.c_str();
+ fprintf(outfname_fl, "%s\n", outstr);
+ }
+
+ free(line);
+ }
+ else /* decrypt */
+ {
+ char *line = NULL;
+ size_t len = 0;
+ ssize_t read;
+
+ char readin[100];
+ BigUnsigned calc = 0;
+ BigInteger tmpbig = 0;
+ string writeout;
+ string tmpstr;
+ const char *outstr = NULL;
+ while ((read = getline(&line, &len, fname_fl)) != -1)
+ {
+ sscanf(line, "%s\n", readin);
+ printf("read in: \"%s\"", readin);
+ string tmpstr(readin);
+ tmpbig = stringToBigInteger(tmpstr);
+ calc = modexp(tmpbig, key.d, key.n);
+ writeout = bigIntegerToString(calc);
+ cout << ", decrypted: " << writeout << endl;
+ outstr = writeout.c_str();
+ fprintf(outfname_fl, "%s\n", outstr);
+ }
+
+ free(line);
+ }
+
+ fclose(fname_fl);
+ fclose(keyfname_fl);
+ fclose(outfname_fl);
+
return 0;
}
diff --git a/crypt.h b/crypt.h
index 6721734..c8c6d9f 100644
--- a/crypt.h
+++ b/crypt.h
@@ -2,7 +2,9 @@
#define _CRYPT_H_
#include <iostream>
+#include <string>
#include "crypt_args.h"
+#include <errno.h>
#include "bigint/BigIntegerLibrary.hh"
using namespace std;
diff --git a/crypt_args.cpp b/crypt_args.cpp
index 7c1dc67..3fde418 100644
--- a/crypt_args.cpp
+++ b/crypt_args.cpp
@@ -110,13 +110,8 @@ int crypt_args(int argc, char **argv)
/* used for line reading */
ssize_t amount_read = 0;
int args_parsed = 0;
- size_t line_sz = 80;
- char *line_ptr = (char *) malloc(sizeof(char) * line_sz);
- if (!line_ptr)
- {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
+ size_t line_sz = 0;
+ char *line_ptr = NULL;
if (fname_f)
fname = strdup(argv[fname_f+1]);
diff --git a/keygen.cpp b/keygen.cpp
index 023a8c9..53751f2 100644
--- a/keygen.cpp
+++ b/keygen.cpp
@@ -6,7 +6,10 @@
#include "keygen.h"
#include "miller_rabin.h"
+
+#ifndef DEBUG
#define DEBUG
+#endif
/* forward declaration of variables from keygen_args.h */
extern char *pubkey;
@@ -95,7 +98,7 @@ int main(int argc, char **argv)
unsigned long d = 1;
while (1)
{
- if ( (e*d - 1) / phi )
+ if ( ((e*d) % phi) == 1 )
break;
d++;
diff --git a/keygen_args.cpp b/keygen_args.cpp
index 2622018..943278f 100644
--- a/keygen_args.cpp
+++ b/keygen_args.cpp
@@ -114,8 +114,8 @@ int keygen_args(int argc, char **argv)
ssize_t amount_read = 0;
int args_parsed = 0;
- size_t line_sz = 80;
- char *line_ptr = (char *) malloc(sizeof(char) * line_sz);
+ size_t line_sz = 0;
+ char *line_ptr = NULL;
/* handle key filenames */
if (fname_args == 2)