version 1.18, 2006/08/03 03:34:42 |
version 1.18.4.1, 2006/11/08 00:42:10 |
|
|
|
|
/* validation check: count the number of primes tried */ |
/* validation check: count the number of primes tried */ |
largetries = 0; |
largetries = 0; |
q = BN_new(); |
if ((q = BN_new()) == NULL) |
|
fatal("BN_new failed"); |
|
|
/* |
/* |
* Generate random starting point for subprime search, or use |
* Generate random starting point for subprime search, or use |
* specified parameter. |
* specified parameter. |
*/ |
*/ |
largebase = BN_new(); |
if ((largebase = BN_new()) == NULL) |
if (start == NULL) |
fatal("BN_new failed"); |
BN_rand(largebase, power, 1, 1); |
if (start == NULL) { |
else |
if (BN_rand(largebase, power, 1, 1) == 0) |
BN_copy(largebase, start); |
fatal("BN_rand failed"); |
|
} else { |
|
if (BN_copy(largebase, start) == NULL) |
|
fatal("BN_copy: failed"); |
|
} |
|
|
/* ensure odd */ |
/* ensure odd */ |
BN_set_bit(largebase, 0); |
if (BN_set_bit(largebase, 0) == 0) |
|
fatal("BN_set_bit: failed"); |
|
|
time(&time_start); |
time(&time_start); |
|
|
|
|
continue; /* Definitely composite, skip */ |
continue; /* Definitely composite, skip */ |
|
|
debug2("test q = largebase+%u", 2 * j); |
debug2("test q = largebase+%u", 2 * j); |
BN_set_word(q, 2 * j); |
if (BN_set_word(q, 2 * j) == 0) |
BN_add(q, q, largebase); |
fatal("BN_set_word failed"); |
|
if (BN_add(q, q, largebase) == 0) |
|
fatal("BN_add failed"); |
if (qfileout(out, QTYPE_SOPHIE_GERMAIN, QTEST_SIEVE, |
if (qfileout(out, QTYPE_SOPHIE_GERMAIN, QTEST_SIEVE, |
largetries, (power - 1) /* MSB */, (0), q) == -1) { |
largetries, (power - 1) /* MSB */, (0), q) == -1) { |
ret = -1; |
ret = -1; |
|
|
|
|
time(&time_start); |
time(&time_start); |
|
|
p = BN_new(); |
if ((p = BN_new()) == NULL) |
q = BN_new(); |
fatal("BN_new failed"); |
ctx = BN_CTX_new(); |
if ((q = BN_new()) == NULL) |
|
fatal("BN_new failed"); |
|
if ((ctx = BN_CTX_new()) == NULL) |
|
fatal("BN_CTX_new failed"); |
|
|
debug2("%.24s Final %u Miller-Rabin trials (%x generator)", |
debug2("%.24s Final %u Miller-Rabin trials (%x generator)", |
ctime(&time_start), trials, generator_wanted); |
ctime(&time_start), trials, generator_wanted); |
|
|
case QTYPE_SOPHIE_GERMAIN: |
case QTYPE_SOPHIE_GERMAIN: |
debug2("%10u: (%u) Sophie-Germain", count_in, in_type); |
debug2("%10u: (%u) Sophie-Germain", count_in, in_type); |
a = q; |
a = q; |
BN_hex2bn(&a, cp); |
if (BN_hex2bn(&a, cp) == 0) |
|
fatal("BN_hex2bn failed"); |
/* p = 2*q + 1 */ |
/* p = 2*q + 1 */ |
BN_lshift(p, q, 1); |
if (BN_lshift(p, q, 1) == 0) |
BN_add_word(p, 1); |
fatal("BN_lshift failed"); |
|
if (BN_add_word(p, 1) == 0) |
|
fatal("BN_add_word failed"); |
in_size += 1; |
in_size += 1; |
generator_known = 0; |
generator_known = 0; |
break; |
break; |
|
|
case QTYPE_UNKNOWN: |
case QTYPE_UNKNOWN: |
debug2("%10u: (%u)", count_in, in_type); |
debug2("%10u: (%u)", count_in, in_type); |
a = p; |
a = p; |
BN_hex2bn(&a, cp); |
if (BN_hex2bn(&a, cp) == 0) |
|
fatal("BN_hex2bn failed"); |
/* q = (p-1) / 2 */ |
/* q = (p-1) / 2 */ |
BN_rshift(q, p, 1); |
if (BN_rshift(q, p, 1) == 0) |
|
fatal("BN_rshift failed"); |
break; |
break; |
default: |
default: |
debug2("Unknown prime type"); |
debug2("Unknown prime type"); |