summaryrefslogtreecommitdiff
path: root/ssh-keygen.c
diff options
context:
space:
mode:
Diffstat (limited to 'ssh-keygen.c')
-rw-r--r--ssh-keygen.c45
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"
15RCSID("$OpenBSD: ssh-keygen.c,v 1.34 2000/11/15 20:24:43 millert Exp $"); 15RCSID("$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;
67int convert_from_ssh2 = 0; 67int convert_from_ssh2 = 0;
68int print_public = 0; 68int print_public = 0;
69 69
70/* key type */ 70/* default to RSA for SSH-1 */
71int dsa_mode = 0; /* compat */ 71char *key_type_name = "rsa1";
72char *key_type_name = NULL;
73 72
74/* argv0 */ 73/* argv0 */
75#ifdef HAVE___PROGNAME 74#ifdef HAVE___PROGNAME
@@ -84,9 +83,24 @@ void
84ask_filename(struct passwd *pw, const char *prompt) 83ask_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");