diff options
author | Kyle K <kylek389@gmail.com> | 2011-02-18 19:10:16 -0600 |
---|---|---|
committer | Kamil Kaminski <kamilkss@gmail.com> | 2011-02-18 19:10:16 -0600 |
commit | 2d1eb462fe119d34568e1652b8107fd552c15025 (patch) | |
tree | 807211ec709b45b2339149adb6fbb5f51d47e569 /crypt.cpp | |
parent | ec58cdb26cc89df9b9bbb0e33fe843e5b4284955 (diff) | |
download | rsacrypt-2d1eb462fe119d34568e1652b8107fd552c15025.tar.gz rsacrypt-2d1eb462fe119d34568e1652b8107fd552c15025.tar.bz2 rsacrypt-2d1eb462fe119d34568e1652b8107fd552c15025.zip |
begin crypt
Diffstat (limited to 'crypt.cpp')
-rw-r--r-- | crypt.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/crypt.cpp b/crypt.cpp new file mode 100644 index 0000000..e72bd97 --- /dev/null +++ b/crypt.cpp @@ -0,0 +1,85 @@ +/* + * crypt.cpp + * + * + */ + +#include "crypt.h" +#define DEBUG + +/* forward declaration of variables from crypt_args.h */ +extern char *fname; +extern char *keyfname; +extern char *outfname; + +struct rsakey_t +{ + long unsigned e, d, n; +}; + +/* parse pubkey xml file */ +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); + + while (getline(&line, &line_sz, file) != -1) + { + sscanf(line, "\t<dvalue>%lu</dvalue>\n", &key.d); + sscanf(line, "\t<evalue>%lu</evalue>\n", &key.e); + sscanf(line, "\t<nvalue>%lu</nvalue>\n", &key.n); + } + + free(line); + return key; +} + +int main(int argc, char **argv) +{ + if (crypt_args(argc, argv) == 0) + cout << "read arguments successfully" << endl; + +#ifdef DEBUG + printf("debug: filename = \"%s\"\n" + " key filename = \"%s\"\n" + " result filename = \"%s\"\n", + fname, keyfname, outfname); +#endif + + /* open file for reading and writing */ + 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) + { + perror("fopen"); + exit(EXIT_FAILURE); + } + + int mode = -1; + struct rsakey_t key = parse_key(keyfname_fl); + + if (key.d == 0 && key.e && key.n) + { + cout << "public key (" << key.e << ", " << key.n + << ") detected, will perform encryption" << endl; + mode = 0; + } + else if (key.e == 0 && key.d && key.n) + { + cout << "private key (" << key.d << ", " << key.n + << ") detected, will perform decryption" << endl; + mode = 1; + } + else + { + fprintf(stderr, "could not determine mode (encryption/decryption)\n"); + exit(EXIT_FAILURE); + } + + return 0; +} + |