From 4875a6cf6a7f01c775df6ff70f7dd1116429d8f4 Mon Sep 17 00:00:00 2001 From: Kyle K Date: Fri, 18 Feb 2011 21:02:38 -0600 Subject: crypt works --- Makefile | 12 ++++++--- crypt.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- crypt.h | 2 ++ crypt_args.cpp | 9 ++----- keygen.cpp | 5 +++- keygen_args.cpp | 4 +-- 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%lu\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 +#include #include "crypt_args.h" +#include #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) -- cgit v1.2.3