*/
#include "includes.h"
-RCSID("$OpenBSD: ssh-keygen.c,v 1.124 2005/05/23 22:44:01 avsm Exp $");
+RCSID("$OpenBSD: ssh-keygen.c,v 1.135 2005/11/29 02:04:55 dtucker Exp $");
#include <openssl/evp.h>
#include <openssl/pem.h>
#endif
#include "dns.h"
-/* Number of bits in the RSA/DSA key. This value can be changed on the command line. */
-u_int32_t bits = 1024;
+/* Number of bits in the RSA/DSA key. This value can be set on the command line. */
+#define DEFAULT_BITS 2048
+#define DEFAULT_BITS_DSA 1024
+u_int32_t bits = 0;
/*
* Flag indicating that we just want to change the passphrase. This can be
fprintf(stderr, "WARNING: %s contains unhashed "
"entries\n", old);
fprintf(stderr, "Delete this file to ensure privacy "
- "of hostnames\n");
+ "of hostnames\n");
}
}
struct passwd *pw;
struct stat st;
int opt, type, fd, download = 0;
- uint32_t memory = 0, generator_wanted = 0, trials = 100;
+ u_int32_t memory = 0, generator_wanted = 0, trials = 100;
int do_gen_candidates = 0, do_screen_candidates = 0;
int log_level = SYSLOG_LEVEL_INFO;
BIGNUM *start = NULL;
FILE *f;
+ const char *errstr;
extern int optind;
extern char *optarg;
- const char *errstr;
+
+ /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
+ sanitise_stdfd();
__progname = ssh_get_progname(av[0]);
"degiqpclBHvxXyF:b:f:t:U:D:P:N:C:r:g:R:T:G:M:S:a:W:")) != -1) {
switch (opt) {
case 'b':
- bits = strtonum(optarg, 512, 32768, &errstr);
- if (errstr) {
- printf("Bits has bad value %s (%s)\n", optarg, errstr);
- exit(1);
- }
+ bits = strtonum(optarg, 768, 32768, &errstr);
+ if (errstr)
+ fatal("Bits has bad value %s (%s)",
+ optarg, errstr);
break;
case 'F':
find_host = 1;
out_file, strerror(errno));
return (1);
}
+ if (bits == 0)
+ bits = DEFAULT_BITS;
if (gen_candidates(out, memory, bits, start) != 0)
- fatal("modulus candidate generation failed\n");
+ fatal("modulus candidate generation failed");
return (0);
}
out_file, strerror(errno));
}
if (prime_test(in, out, trials, generator_wanted) != 0)
- fatal("modulus screening failed\n");
+ fatal("modulus screening failed");
return (0);
}
arc4random_stir();
- if (key_type_name == NULL) {
- printf("You must specify a key type (-t).\n");
- usage();
- }
+ if (key_type_name == NULL)
+ key_type_name = "rsa";
+
type = key_type_from_name(key_type_name);
if (type == KEY_UNSPEC) {
fprintf(stderr, "unknown key type %s\n", key_type_name);
exit(1);
}
+ if (bits == 0)
+ bits = (type == KEY_DSA) ? DEFAULT_BITS_DSA : DEFAULT_BITS;
+ if (type == KEY_DSA && bits != 1024)
+ fatal("DSA keys must be 1024 bits");
if (!quiet)
printf("Generating public/private %s key pair.\n", key_type_name);
private = key_generate(type, bits);
if (!have_identity)
ask_filename(pw, "Enter file in which to save the key");
- /* Create ~/.ssh directory if it doesn\'t already exist. */
+ /* Create ~/.ssh directory if it doesn't already exist. */
snprintf(dotsshdir, sizeof dotsshdir, "%s/%s", pw->pw_dir, _PATH_SSH_USER_DIR);
if (strstr(identity_file, dotsshdir) != NULL &&
stat(dotsshdir, &st) < 0) {