summaryrefslogtreecommitdiffstats
path: root/moduli.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2004-05-13 16:24:32 +1000
committerDarren Tucker <dtucker@zip.com.au>2004-05-13 16:24:32 +1000
commit770fc01078ffd4952ceb91f617063b390730499c (patch)
tree4371321e51979a9a4c3ee2a8700e5edfeb717e11 /moduli.c
parente608ca2965a4afe58477faf1d36ce574416b66a7 (diff)
- djm@cvs.openbsd.org 2004/05/09 00:06:47
[moduli.c ssh-keygen.c] removed: moduli.h zap another tiny header; ok deraadt@
Diffstat (limited to 'moduli.c')
-rw-r--r--moduli.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/moduli.c b/moduli.c
index d454c30d..f72baab3 100644
--- a/moduli.c
+++ b/moduli.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: moduli.c,v 1.6 2004/04/22 11:56:57 djm Exp $ */
+/* $OpenBSD: moduli.c,v 1.7 2004/05/09 00:06:47 djm Exp $ */
/*
* Copyright 1994 Phil Karn <karn@qualcomm.com>
* Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com>
@@ -38,7 +38,6 @@
*/
#include "includes.h"
-#include "moduli.h"
#include "xmalloc.h"
#include "log.h"
@@ -91,6 +90,19 @@
#define SHIFT_MEGAWORD (SHIFT_MEGABYTE-SHIFT_BYTE)
/*
+ * Using virtual memory can cause thrashing. This should be the largest
+ * number that is supported without a large amount of disk activity --
+ * that would increase the run time from hours to days or weeks!
+ */
+#define LARGE_MINIMUM (8UL) /* megabytes */
+
+/*
+ * Do not increase this number beyond the unsigned integer bit size.
+ * Due to a multiple of 4, it must be LESS than 128 (yielding 2**30 bits).
+ */
+#define LARGE_MAXIMUM (127UL) /* megabytes */
+
+/*
* Constant: when used with 32-bit integers, the largest sieve prime
* has to be less than 2**32.
*/
@@ -114,6 +126,9 @@
* Prime testing defines
*/
+/* Minimum number of primality tests to perform */
+#define TRIAL_MINIMUM (4)
+
/*
* Sieving data (XXX - move to struct)
*/
@@ -235,6 +250,13 @@ gen_candidates(FILE *out, int memory, int power, BIGNUM *start)
largememory = memory;
+ if (memory != 0 &&
+ (memory < LARGE_MINIMUM || memory > LARGE_MAXIMUM)) {
+ error("Invalid memory amount (min %ld, max %ld)",
+ LARGE_MINIMUM, LARGE_MAXIMUM);
+ return (-1);
+ }
+
/*
* Set power to the length in bits of the prime to be generated.
* This is changed to 1 less than the desired safe prime moduli p.
@@ -430,8 +452,7 @@ gen_candidates(FILE *out, int memory, int power, BIGNUM *start)
* The result is a list of so-call "safe" primes
*/
int
-prime_test(FILE *in, FILE *out, u_int32_t trials,
- u_int32_t generator_wanted)
+prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted)
{
BIGNUM *q, *p, *a;
BN_CTX *ctx;
@@ -441,6 +462,11 @@ prime_test(FILE *in, FILE *out, u_int32_t trials,
time_t time_start, time_stop;
int res;
+ if (trials < TRIAL_MINIMUM) {
+ error("Minimum primality trials is %d", TRIAL_MINIMUM);
+ return (-1);
+ }
+
time(&time_start);
p = BN_new();