summaryrefslogtreecommitdiffstats
path: root/crypt.cpp
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2011-02-18 19:10:16 -0600
committerKamil Kaminski <kamilkss@gmail.com>2011-02-18 19:10:16 -0600
commit2d1eb462fe119d34568e1652b8107fd552c15025 (patch)
tree807211ec709b45b2339149adb6fbb5f51d47e569 /crypt.cpp
parentec58cdb26cc89df9b9bbb0e33fe843e5b4284955 (diff)
downloadrsacrypt-2d1eb462fe119d34568e1652b8107fd552c15025.tar.gz
rsacrypt-2d1eb462fe119d34568e1652b8107fd552c15025.tar.bz2
rsacrypt-2d1eb462fe119d34568e1652b8107fd552c15025.zip
begin crypt
Diffstat (limited to 'crypt.cpp')
-rw-r--r--crypt.cpp85
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;
+}
+