diff options
Diffstat (limited to 'ssh-keygen.c')
-rw-r--r-- | ssh-keygen.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/ssh-keygen.c b/ssh-keygen.c index 5da90035a..89c03d901 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c | |||
@@ -12,7 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include "includes.h" | 14 | #include "includes.h" |
15 | RCSID("$OpenBSD: ssh-keygen.c,v 1.34 2000/11/15 20:24:43 millert Exp $"); | 15 | RCSID("$OpenBSD: ssh-keygen.c,v 1.35 2000/11/25 17:19:33 markus Exp $"); |
16 | 16 | ||
17 | #include <openssl/evp.h> | 17 | #include <openssl/evp.h> |
18 | #include <openssl/pem.h> | 18 | #include <openssl/pem.h> |
@@ -67,9 +67,8 @@ int convert_to_ssh2 = 0; | |||
67 | int convert_from_ssh2 = 0; | 67 | int convert_from_ssh2 = 0; |
68 | int print_public = 0; | 68 | int print_public = 0; |
69 | 69 | ||
70 | /* key type */ | 70 | /* default to RSA for SSH-1 */ |
71 | int dsa_mode = 0; /* compat */ | 71 | char *key_type_name = "rsa1"; |
72 | char *key_type_name = NULL; | ||
73 | 72 | ||
74 | /* argv0 */ | 73 | /* argv0 */ |
75 | #ifdef HAVE___PROGNAME | 74 | #ifdef HAVE___PROGNAME |
@@ -84,9 +83,24 @@ void | |||
84 | ask_filename(struct passwd *pw, const char *prompt) | 83 | ask_filename(struct passwd *pw, const char *prompt) |
85 | { | 84 | { |
86 | char buf[1024]; | 85 | char buf[1024]; |
87 | snprintf(identity_file, sizeof(identity_file), "%s/%s", | 86 | char *name = NULL; |
88 | pw->pw_dir, | 87 | |
89 | dsa_mode ? SSH_CLIENT_ID_DSA: SSH_CLIENT_IDENTITY); | 88 | switch (key_type_from_name(key_type_name)) { |
89 | case KEY_RSA1: | ||
90 | name = SSH_CLIENT_IDENTITY; | ||
91 | break; | ||
92 | case KEY_DSA: | ||
93 | name = SSH_CLIENT_ID_DSA; | ||
94 | break; | ||
95 | case KEY_RSA: | ||
96 | name = SSH_CLIENT_ID_RSA; | ||
97 | break; | ||
98 | default: | ||
99 | fprintf(stderr, "bad key type"); | ||
100 | exit(1); | ||
101 | break; | ||
102 | } | ||
103 | snprintf(identity_file, sizeof(identity_file), "%s/%s", pw->pw_dir, name); | ||
90 | printf("%s (%s): ", prompt, identity_file); | 104 | printf("%s (%s): ", prompt, identity_file); |
91 | fflush(stdout); | 105 | fflush(stdout); |
92 | if (fgets(buf, sizeof(buf), stdin) == NULL) | 106 | if (fgets(buf, sizeof(buf), stdin) == NULL) |
@@ -600,10 +614,9 @@ main(int ac, char **av) | |||
600 | { | 614 | { |
601 | char dotsshdir[16 * 1024], comment[1024], *passphrase1, *passphrase2; | 615 | char dotsshdir[16 * 1024], comment[1024], *passphrase1, *passphrase2; |
602 | struct passwd *pw; | 616 | struct passwd *pw; |
603 | int opt; | 617 | int opt, type; |
604 | struct stat st; | 618 | struct stat st; |
605 | FILE *f; | 619 | FILE *f; |
606 | int type = KEY_RSA1; | ||
607 | Key *private; | 620 | Key *private; |
608 | Key *public; | 621 | Key *public; |
609 | 622 | ||
@@ -688,12 +701,10 @@ main(int ac, char **av) | |||
688 | 701 | ||
689 | case 'd': | 702 | case 'd': |
690 | key_type_name = "dsa"; | 703 | key_type_name = "dsa"; |
691 | dsa_mode = 1; | ||
692 | break; | 704 | break; |
693 | 705 | ||
694 | case 't': | 706 | case 't': |
695 | key_type_name = optarg; | 707 | key_type_name = optarg; |
696 | dsa_mode = (strcmp(optarg, "dsa") == 0); | ||
697 | break; | 708 | break; |
698 | 709 | ||
699 | case '?': | 710 | case '?': |
@@ -724,15 +735,13 @@ main(int ac, char **av) | |||
724 | 735 | ||
725 | arc4random_stir(); | 736 | arc4random_stir(); |
726 | 737 | ||
727 | if (key_type_name != NULL) { | 738 | type = key_type_from_name(key_type_name); |
728 | type = key_type_from_name(key_type_name); | 739 | if (type == KEY_UNSPEC) { |
729 | if (type == KEY_UNSPEC) { | 740 | fprintf(stderr, "unknown key type %s\n", key_type_name); |
730 | fprintf(stderr, "unknown key type %s\n", key_type_name); | 741 | exit(1); |
731 | exit(1); | ||
732 | } | ||
733 | } | 742 | } |
734 | if (!quiet) | 743 | if (!quiet) |
735 | printf("Generating public/private key pair.\n"); | 744 | printf("Generating public/private %s key pair.\n", key_type_name); |
736 | private = key_generate(type, bits); | 745 | private = key_generate(type, bits); |
737 | if (private == NULL) { | 746 | if (private == NULL) { |
738 | fprintf(stderr, "key_generate failed"); | 747 | fprintf(stderr, "key_generate failed"); |