summaryrefslogtreecommitdiffstats
path: root/keygen_args.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'keygen_args.cpp')
-rw-r--r--keygen_args.cpp37
1 files changed, 24 insertions, 13 deletions
diff --git a/keygen_args.cpp b/keygen_args.cpp
index 174227d..cc47447 100644
--- a/keygen_args.cpp
+++ b/keygen_args.cpp
@@ -8,6 +8,7 @@
*/
#include "keygen_args.h"
+#include "miller_rabin.h"
char *pubkey;
char *prikey;
@@ -21,7 +22,6 @@ int keygen_args(int argc, char **argv)
int primep_f = 0;
int primeq_f = 0;
int fname_f = 0;
- int random_f = 0;
int usage_f = 0;
random_f = 0;
int primep_args = 0;
@@ -155,6 +155,7 @@ int keygen_args(int argc, char **argv)
if (primep_f)
{
+ /* if number was not specified or it's not a prime ask for the number */
if (primep_args == 0)
{
printf("please provide a value for prime p: ");
@@ -166,18 +167,27 @@ int keygen_args(int argc, char **argv)
args_parsed = sscanf(line_ptr, "%ld", &prime_p);
if (args_parsed != 1)
fprintf(stderr, "invalid input, please try again: ");
- } while (args_parsed != 1);
+ if (!miller_rabin_16(prime_p))
+ fprintf(stderr, "not a prime number, please try again: ");
+ } while (args_parsed != 1 || !miller_rabin_16(prime_p));
}
else
+ {
prime_p = atol(argv[primep_f+1]);
-
+ if (!miller_rabin_16(prime_p))
+ {
+ fprintf(stderr, "prime p on the command line is not prime\n");
+ exit(EXIT_FAILURE);
+ }
+ }
}
if (primeq_f)
{
+ /* if number was not specified or it's not a prime ask for the number */
if (primeq_args == 0)
{
- printf("please provide a value for prime p: ");
+ printf("please provide a value for prime q: ");
do
{
@@ -186,20 +196,21 @@ int keygen_args(int argc, char **argv)
args_parsed = sscanf(line_ptr, "%ld", &prime_q);
if (args_parsed != 1)
fprintf(stderr, "invalid input, please try again: ");
- } while (args_parsed != 1);
+ if (!miller_rabin_16(prime_q))
+ fprintf(stderr, "not a prime number, please try again: ");
+ } while (args_parsed != 1 || !miller_rabin_16(prime_q));
}
else
+ {
prime_q = atol(argv[primeq_f+1]);
+ if (!miller_rabin_16(prime_q))
+ {
+ fprintf(stderr, "prime q on the command line is not prime\n");
+ exit(EXIT_FAILURE);
+ }
+ }
}
-#ifdef DEBUG
- fprintf(stdout, "debug: pubkey = \"%s\"\n"
- " prikey = \"%s\"\n"
- " primep = \"%ld\"\n"
- " primeq = \"%ld\"\n",
- pubkey, prikey, prime_p, prime_q);
-#endif
-
return 0;
}