diff options
| -rw-r--r-- | Makefile | 12 | ||||
| -rw-r--r-- | crypt.cpp | 77 | ||||
| -rw-r--r-- | crypt.h | 2 | ||||
| -rw-r--r-- | crypt_args.cpp | 9 | ||||
| -rw-r--r-- | keygen.cpp | 5 | ||||
| -rw-r--r-- | keygen_args.cpp | 4 | 
6 files changed, 91 insertions, 18 deletions
| @@ -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 @@ -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;  } @@ -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]); @@ -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) | 
