summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2011-02-17 15:35:04 -0600
committerKamil Kaminski <kamilkss@gmail.com>2011-02-17 15:35:04 -0600
commit9c23764afcbda27ec86d4297b12e518b305c2df1 (patch)
tree143aba5e0ac397bd573f429664c417e76a74c92f
parent63ae19daee4ac682a72730b66d8be0a3a38d41be (diff)
downloadrsacrypt-9c23764afcbda27ec86d4297b12e518b305c2df1.tar.gz
rsacrypt-9c23764afcbda27ec86d4297b12e518b305c2df1.tar.bz2
rsacrypt-9c23764afcbda27ec86d4297b12e518b305c2df1.zip
do more work
-rw-r--r--keygen.cpp50
1 files changed, 48 insertions, 2 deletions
diff --git a/keygen.cpp b/keygen.cpp
index 560d45b..24aa12a 100644
--- a/keygen.cpp
+++ b/keygen.cpp
@@ -6,6 +6,7 @@
#include "keygen.h"
#include "miller_rabin.h"
+#define DEBUG
/* forward declaration of variables from keygen_args.h */
extern char *pubkey;
@@ -60,6 +61,12 @@ int main(int argc, char **argv)
/* n = p * q */
unsigned long n = prime_p * prime_q;
+ if (n <= 127)
+ {
+ fprintf(stderr, "p * q needs to be bigger than 127\n");
+ exit(EXIT_FAILURE);
+ }
+
/* phi = (p-1)(q-1) */
unsigned long phi = (prime_p-1) * (prime_q-1);
@@ -67,6 +74,7 @@ int main(int argc, char **argv)
unsigned long e;
/* find e, 1 < e < phi, such that gcd(e, phi) = 1 */
int i;
+ fprintf(stdout, "computing e... ");
for (i = 0; i < 4; i++)
{
e = fermat_primes[i];
@@ -78,6 +86,19 @@ int main(int argc, char **argv)
fprintf(stderr, "error, could not find e\n");
exit(EXIT_FAILURE);
}
+ fprintf(stdout, "done\n");
+
+ /* find d */
+ unsigned long d = 1;
+ fprintf(stdout, "computing d... ");
+ while (1)
+ {
+ if ( (e*d - 1) / phi )
+ break;
+ else
+ d++;
+ }
+ fprintf(stdout, "done\n");
#ifdef DEBUG
fprintf(stdout, "debug: pubkey = \"%s\"\n"
@@ -86,10 +107,35 @@ int main(int argc, char **argv)
" q = \"%ld\"\n"
" n = \"%lu\"\n"
" phi = \"%lu\"\n"
- " e = \"%lu\"\n",
- pubkey, prikey, prime_p, prime_q, n, phi, e);
+ " e = \"%lu\"\n"
+ " d = \"%lu\"\n",
+ pubkey, prikey, prime_p, prime_q, n, phi, e, d);
#endif
+ /* save to xml files */
+ FILE *public_key = fopen(pubkey, "w");
+ FILE *private_key = fopen(prikey, "w");
+ if (public_key == NULL || private_key == NULL)
+ {
+ perror("fopen");
+ exit(EXIT_FAILURE);
+ }
+
+ fprintf(public_key, "<rsakey>\n");
+ fprintf(public_key, "\t<evalue>%lu</evalue>\n", e);
+ fprintf(public_key, "\t<nvalue>%lu</nvalue>\n", n);
+ fprintf(public_key, "</rsakey>\n");
+ fprintf(stdout, "wrote \"%s\" file\n", pubkey);
+
+ fprintf(private_key, "<rsakey>\n");
+ fprintf(private_key, "\t<dvalue>%lu</dvalue>\n", d);
+ fprintf(private_key, "\t<nvalue>%lu</nvalue>\n", n);
+ fprintf(private_key, "</rsakey>\n");
+ fprintf(stdout, "wrote \"%s\" file\n", prikey);
+
+ fclose(public_key);
+ fclose(private_key);
+
return 0;
}