version 1.102.2.1, 2003/09/16 20:50:44 |
version 1.102.2.2, 2004/03/04 18:18:16 |
|
|
#ifdef SMARTCARD |
#ifdef SMARTCARD |
#include "scard.h" |
#include "scard.h" |
#endif |
#endif |
#ifdef DNS |
|
#include "dns.h" |
#include "dns.h" |
#endif |
|
|
|
/* Number of bits in the RSA/DSA key. This value can be changed on the command line. */ |
/* Number of bits in the RSA/DSA key. This value can be changed on the command line. */ |
int bits = 1024; |
int bits = 1024; |
|
|
static void |
static void |
buffer_get_bignum_bits(Buffer *b, BIGNUM *value) |
buffer_get_bignum_bits(Buffer *b, BIGNUM *value) |
{ |
{ |
int bits = buffer_get_int(b); |
u_int bits = buffer_get_int(b); |
int bytes = (bits + 7) / 8; |
u_int bytes = (bits + 7) / 8; |
|
|
if (buffer_len(b) < bytes) |
if (buffer_len(b) < bytes) |
fatal("buffer_get_bignum_bits: input buffer too small: " |
fatal("buffer_get_bignum_bits: input buffer too small: " |
|
|
exit(0); |
exit(0); |
} |
} |
|
|
#ifdef DNS |
|
/* |
/* |
* Print the SSHFP RR. |
* Print the SSHFP RR. |
*/ |
*/ |
|
|
printf("failed to read v2 public key from %s.\n", identity_file); |
printf("failed to read v2 public key from %s.\n", identity_file); |
exit(1); |
exit(1); |
} |
} |
#endif /* DNS */ |
|
|
|
/* |
/* |
* Change the comment of a private key file. |
* Change the comment of a private key file. |
|
|
fprintf(stderr, " -C comment Provide new comment.\n"); |
fprintf(stderr, " -C comment Provide new comment.\n"); |
fprintf(stderr, " -N phrase Provide new passphrase.\n"); |
fprintf(stderr, " -N phrase Provide new passphrase.\n"); |
fprintf(stderr, " -P phrase Provide old passphrase.\n"); |
fprintf(stderr, " -P phrase Provide old passphrase.\n"); |
#ifdef DNS |
|
fprintf(stderr, " -r hostname Print DNS resource record.\n"); |
fprintf(stderr, " -r hostname Print DNS resource record.\n"); |
#endif /* DNS */ |
|
#ifdef SMARTCARD |
#ifdef SMARTCARD |
fprintf(stderr, " -D reader Download public key from smartcard.\n"); |
fprintf(stderr, " -D reader Download public key from smartcard.\n"); |
fprintf(stderr, " -U reader Upload private key to smartcard.\n"); |
fprintf(stderr, " -U reader Upload private key to smartcard.\n"); |
|
|
main(int ac, char **av) |
main(int ac, char **av) |
{ |
{ |
char dotsshdir[MAXPATHLEN], comment[1024], *passphrase1, *passphrase2; |
char dotsshdir[MAXPATHLEN], comment[1024], *passphrase1, *passphrase2; |
char out_file[PATH_MAX], *reader_id = NULL; |
char out_file[MAXPATHLEN], *reader_id = NULL; |
char *resource_record_hostname = NULL; |
char *resource_record_hostname = NULL; |
Key *private, *public; |
Key *private, *public; |
struct passwd *pw; |
struct passwd *pw; |
|
|
int opt, type, fd, download = 0, memory = 0; |
int opt, type, fd, download = 0, memory = 0; |
int generator_wanted = 0, trials = 100; |
int generator_wanted = 0, trials = 100; |
int do_gen_candidates = 0, do_screen_candidates = 0; |
int do_gen_candidates = 0, do_screen_candidates = 0; |
|
int log_level = SYSLOG_LEVEL_INFO; |
BIGNUM *start = NULL; |
BIGNUM *start = NULL; |
FILE *f; |
FILE *f; |
|
|
|
|
} |
} |
|
|
while ((opt = getopt(ac, av, |
while ((opt = getopt(ac, av, |
"degiqpclBRxXyb:f:t:U:D:P:N:C:r:g:T:G:M:S:a:W:")) != -1) { |
"degiqpclBRvxXyb:f:t:U:D:P:N:C:r:g:T:G:M:S:a:W:")) != -1) { |
switch (opt) { |
switch (opt) { |
case 'b': |
case 'b': |
bits = atoi(optarg); |
bits = atoi(optarg); |
|
|
case 'U': |
case 'U': |
reader_id = optarg; |
reader_id = optarg; |
break; |
break; |
|
case 'v': |
|
if (log_level == SYSLOG_LEVEL_INFO) |
|
log_level = SYSLOG_LEVEL_DEBUG1; |
|
else { |
|
if (log_level >= SYSLOG_LEVEL_DEBUG1 && |
|
log_level < SYSLOG_LEVEL_DEBUG3) |
|
log_level++; |
|
} |
|
break; |
case 'r': |
case 'r': |
resource_record_hostname = optarg; |
resource_record_hostname = optarg; |
break; |
break; |
|
|
case 'a': |
case 'a': |
trials = atoi(optarg); |
trials = atoi(optarg); |
if (trials < TRIAL_MINIMUM) { |
if (trials < TRIAL_MINIMUM) { |
fatal("Minimum primality trials is %d", |
fatal("Minimum primality trials is %d", |
TRIAL_MINIMUM); |
TRIAL_MINIMUM); |
} |
} |
break; |
break; |
case 'M': |
case 'M': |
memory = atoi(optarg); |
memory = atoi(optarg); |
if (memory != 0 && |
if (memory != 0 && |
(memory < LARGE_MINIMUM || memory > LARGE_MAXIMUM)) { |
(memory < LARGE_MINIMUM || memory > LARGE_MAXIMUM)) { |
fatal("Invalid memory amount (min %ld, max %ld)", |
fatal("Invalid memory amount (min %ld, max %ld)", |
LARGE_MINIMUM, LARGE_MAXIMUM); |
LARGE_MINIMUM, LARGE_MAXIMUM); |
|
|
usage(); |
usage(); |
} |
} |
} |
} |
|
|
|
/* reinit */ |
|
log_init(av[0], log_level, SYSLOG_FACILITY_USER, 1); |
|
|
if (optind < ac) { |
if (optind < ac) { |
printf("Too many arguments.\n"); |
printf("Too many arguments.\n"); |
usage(); |
usage(); |
|
|
if (print_public) |
if (print_public) |
do_print_public(pw); |
do_print_public(pw); |
if (resource_record_hostname != NULL) { |
if (resource_record_hostname != NULL) { |
#ifdef DNS |
|
do_print_resource_record(pw, resource_record_hostname); |
do_print_resource_record(pw, resource_record_hostname); |
#else /* DNS */ |
|
fatal("no DNS support."); |
|
#endif /* DNS */ |
|
} |
} |
if (reader_id != NULL) { |
if (reader_id != NULL) { |
#ifdef SMARTCARD |
#ifdef SMARTCARD |
|
|
|
|
if (do_gen_candidates) { |
if (do_gen_candidates) { |
FILE *out = fopen(out_file, "w"); |
FILE *out = fopen(out_file, "w"); |
|
|
if (out == NULL) { |
if (out == NULL) { |
error("Couldn't open modulus candidate file \"%s\": %s", |
error("Couldn't open modulus candidate file \"%s\": %s", |
out_file, strerror(errno)); |
out_file, strerror(errno)); |
|
|
if (have_identity && strcmp(identity_file, "-") != 0) { |
if (have_identity && strcmp(identity_file, "-") != 0) { |
if ((in = fopen(identity_file, "r")) == NULL) { |
if ((in = fopen(identity_file, "r")) == NULL) { |
fatal("Couldn't open modulus candidate " |
fatal("Couldn't open modulus candidate " |
"file \"%s\": %s", identity_file, |
"file \"%s\": %s", identity_file, |
strerror(errno)); |
strerror(errno)); |
} |
} |
} else |
} else |