[BACK]Return to ssh-keygen.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/ssh-keygen.c between version 1.52 and 1.61

version 1.52, 2001/03/26 08:07:09 version 1.61, 2001/05/25 14:37:32
Line 19 
Line 19 
   
 #include "xmalloc.h"  #include "xmalloc.h"
 #include "key.h"  #include "key.h"
   #include "rsa.h"
 #include "authfile.h"  #include "authfile.h"
 #include "uuencode.h"  #include "uuencode.h"
 #include "buffer.h"  #include "buffer.h"
Line 108 
Line 109 
 }  }
   
 Key *  Key *
 try_load_pem_key(char *filename)  load_identity(char *filename)
 {  {
         char *pass;          char *pass;
         Key *prv;          Key *prv;
   
         prv = key_load_private(filename, "", NULL);          prv = key_load_private(filename, "", NULL);
         if (prv == NULL) {          if (prv == NULL) {
                 pass = read_passphrase("Enter passphrase: ", 1);                  if (identity_passphrase)
                           pass = xstrdup(identity_passphrase);
                   else
                           pass = read_passphrase("Enter passphrase: ", 1);
                 prv = key_load_private(filename, pass, NULL);                  prv = key_load_private(filename, pass, NULL);
                 memset(pass, 0, strlen(pass));                  memset(pass, 0, strlen(pass));
                 xfree(pass);                  xfree(pass);
Line 131 
Line 135 
 void  void
 do_convert_to_ssh2(struct passwd *pw)  do_convert_to_ssh2(struct passwd *pw)
 {  {
         Key *prv;          Key *k;
         int len;          int len;
         u_char *blob;          u_char *blob;
         struct stat st;          struct stat st;
Line 142 
Line 146 
                 perror(identity_file);                  perror(identity_file);
                 exit(1);                  exit(1);
         }          }
         prv = try_load_pem_key(identity_file);          if ((k = key_load_public(identity_file, NULL)) == NULL) {
         if (prv == NULL) {                  if ((k = load_identity(identity_file)) == NULL) {
                 fprintf(stderr, "load failed\n");                          fprintf(stderr, "load failed\n");
                 exit(1);                          exit(1);
                   }
         }          }
         key_to_blob(prv, &blob, &len);          key_to_blob(k, &blob, &len);
         fprintf(stdout, "%s\n", SSH_COM_PUBLIC_BEGIN);          fprintf(stdout, "%s\n", SSH_COM_PUBLIC_BEGIN);
         fprintf(stdout,          fprintf(stdout,
             "Comment: \"%d-bit %s, converted from OpenSSH by %s@%s\"\n",              "Comment: \"%d-bit %s, converted from OpenSSH by %s@%s\"\n",
             key_size(prv), key_type(prv),              key_size(k), key_type(k),
             pw->pw_name, hostname);              pw->pw_name, hostname);
         dump_base64(stdout, blob, len);          dump_base64(stdout, blob, len);
         fprintf(stdout, "%s\n", SSH_COM_PUBLIC_END);          fprintf(stdout, "%s\n", SSH_COM_PUBLIC_END);
         key_free(prv);          key_free(k);
         xfree(blob);          xfree(blob);
         exit(0);          exit(0);
 }  }
Line 165 
Line 170 
 {  {
         int bits = buffer_get_int(b);          int bits = buffer_get_int(b);
         int bytes = (bits + 7) / 8;          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: "
                       "need %d have %d", bytes, buffer_len(b));
         BN_bin2bn((u_char *)buffer_ptr(b), bytes, value);          BN_bin2bn((u_char *)buffer_ptr(b), bytes, value);
         buffer_consume(b, bytes);          buffer_consume(b, bytes);
 }  }
Line 175 
Line 182 
 do_convert_private_ssh2_from_blob(char *blob, int blen)  do_convert_private_ssh2_from_blob(char *blob, int blen)
 {  {
         Buffer b;          Buffer b;
         DSA *dsa;  
         Key *key = NULL;          Key *key = NULL;
         int ignore, magic, rlen;          int ignore, magic, rlen, ktype;
         char *type, *cipher;          char *type, *cipher;
   
         buffer_init(&b);          buffer_init(&b);
Line 195 
Line 201 
         ignore = buffer_get_int(&b);          ignore = buffer_get_int(&b);
         ignore = buffer_get_int(&b);          ignore = buffer_get_int(&b);
         ignore = buffer_get_int(&b);          ignore = buffer_get_int(&b);
         xfree(type);  
   
         if (strcmp(cipher, "none") != 0) {          if (strcmp(cipher, "none") != 0) {
                 error("unsupported cipher %s", cipher);                  error("unsupported cipher %s", cipher);
                 xfree(cipher);                  xfree(cipher);
                 buffer_free(&b);                  buffer_free(&b);
                   xfree(type);
                 return NULL;                  return NULL;
         }          }
         xfree(cipher);          xfree(cipher);
   
         key = key_new(KEY_DSA);          if (strstr(type, "dsa")) {
         dsa = key->dsa;                  ktype = KEY_DSA;
         dsa->priv_key = BN_new();          } else if (strstr(type, "rsa")) {
         if (dsa->priv_key == NULL) {                  ktype = KEY_RSA;
                 error("alloc priv_key failed");          } else {
                 key_free(key);                  xfree(type);
                 return NULL;                  return NULL;
         }          }
         buffer_get_bignum_bits(&b, dsa->p);          key = key_new_private(ktype);
         buffer_get_bignum_bits(&b, dsa->g);          xfree(type);
         buffer_get_bignum_bits(&b, dsa->q);  
         buffer_get_bignum_bits(&b, dsa->pub_key);          switch (key->type) {
         buffer_get_bignum_bits(&b, dsa->priv_key);          case KEY_DSA:
                   buffer_get_bignum_bits(&b, key->dsa->p);
                   buffer_get_bignum_bits(&b, key->dsa->g);
                   buffer_get_bignum_bits(&b, key->dsa->q);
                   buffer_get_bignum_bits(&b, key->dsa->pub_key);
                   buffer_get_bignum_bits(&b, key->dsa->priv_key);
                   break;
           case KEY_RSA:
                   if (!BN_set_word(key->rsa->e, (u_long) buffer_get_char(&b))) {
                           buffer_free(&b);
                           key_free(key);
                           return NULL;
                   }
                   buffer_get_bignum_bits(&b, key->rsa->d);
                   buffer_get_bignum_bits(&b, key->rsa->n);
                   buffer_get_bignum_bits(&b, key->rsa->iqmp);
                   buffer_get_bignum_bits(&b, key->rsa->q);
                   buffer_get_bignum_bits(&b, key->rsa->p);
                   generate_additional_parameters(key->rsa);
                   break;
           }
         rlen = buffer_len(&b);          rlen = buffer_len(&b);
         if(rlen != 0)          if(rlen != 0)
                 error("do_convert_private_ssh2_from_blob: remaining bytes in key blob %d", rlen);                  error("do_convert_private_ssh2_from_blob: "
                       "remaining bytes in key blob %d", rlen);
         buffer_free(&b);          buffer_free(&b);
   #ifdef DEBUG_PK
           {
                   u_int slen;
                   u_char *sig, data[10] = "abcde12345";
   
                   key_sign(key, &sig, &slen, data, sizeof data);
                   key_verify(key, sig, slen, data, sizeof data);
                   xfree(sig);
           }
   #endif
         return key;          return key;
 }  }
   
Line 260 
Line 297 
                     strstr(line, ": ") != NULL) {                      strstr(line, ": ") != NULL) {
                         if (strstr(line, SSH_COM_PRIVATE_BEGIN) != NULL)                          if (strstr(line, SSH_COM_PRIVATE_BEGIN) != NULL)
                                 private = 1;                                  private = 1;
                         fprintf(stderr, "ignore: %s", line);                          /* fprintf(stderr, "ignore: %s", line); */
                         continue;                          continue;
                 }                  }
                 if (escaped) {                  if (escaped) {
                         escaped--;                          escaped--;
                         fprintf(stderr, "escaped: %s", line);                          /* fprintf(stderr, "escaped: %s", line); */
                         continue;                          continue;
                 }                  }
                 *p = '\0';                  *p = '\0';
Line 284 
Line 321 
                 exit(1);                  exit(1);
         }          }
         ok = private ?          ok = private ?
             PEM_write_DSAPrivateKey(stdout, k->dsa, NULL, NULL, 0, NULL, NULL) :              (k->type == KEY_DSA ?
                    PEM_write_DSAPrivateKey(stdout, k->dsa, NULL, NULL, 0, NULL, NULL) :
                    PEM_write_RSAPrivateKey(stdout, k->rsa, NULL, NULL, 0, NULL, NULL)) :
             key_write(k, stdout);              key_write(k, stdout);
         if (!ok) {          if (!ok) {
                 fprintf(stderr, "key write failed");                  fprintf(stderr, "key write failed");
Line 308 
Line 347 
                 perror(identity_file);                  perror(identity_file);
                 exit(1);                  exit(1);
         }          }
         prv = try_load_pem_key(identity_file);          prv = load_identity(identity_file);
         if (prv == NULL) {          if (prv == NULL) {
                 fprintf(stderr, "load failed\n");                  fprintf(stderr, "load failed\n");
                 exit(1);                  exit(1);
Line 473 
Line 512 
   
         /* Save the file using the new passphrase. */          /* Save the file using the new passphrase. */
         if (!key_save_private(private, identity_file, passphrase1, comment)) {          if (!key_save_private(private, identity_file, passphrase1, comment)) {
                 printf("Saving the key failed: %s: %s.\n",                  printf("Saving the key failed: %s.\n", identity_file);
                        identity_file, strerror(errno));  
                 memset(passphrase1, 0, strlen(passphrase1));                  memset(passphrase1, 0, strlen(passphrase1));
                 xfree(passphrase1);                  xfree(passphrase1);
                 key_free(private);                  key_free(private);
Line 552 
Line 590 
   
         /* Save the file using the new passphrase. */          /* Save the file using the new passphrase. */
         if (!key_save_private(private, identity_file, passphrase, new_comment)) {          if (!key_save_private(private, identity_file, passphrase, new_comment)) {
                 printf("Saving the key failed: %s: %s.\n",                  printf("Saving the key failed: %s.\n", identity_file);
                        identity_file, strerror(errno));  
                 memset(passphrase, 0, strlen(passphrase));                  memset(passphrase, 0, strlen(passphrase));
                 xfree(passphrase);                  xfree(passphrase);
                 key_free(private);                  key_free(private);
Line 591 
Line 628 
 void  void
 usage(void)  usage(void)
 {  {
         printf("Usage: %s [-lBpqxXyc] [-t type] [-b bits] [-f file] [-C comment] "          printf("Usage: %s [-ceilpqyB] [-t type] [-b bits] [-f file] [-C comment] "
             "[-N new-pass] [-P pass]\n", __progname);              "[-N new-pass] [-P pass]\n", __progname);
         exit(1);          exit(1);
 }  }
Line 625 
Line 662 
                 exit(1);                  exit(1);
         }          }
   
         while ((opt = getopt(ac, av, "dqpclBRxXyb:f:t:P:N:C:")) != -1) {          while ((opt = getopt(ac, av, "deiqpclBRxXyb:f:t:P:N:C:")) != -1) {
                 switch (opt) {                  switch (opt) {
                 case 'b':                  case 'b':
                         bits = atoi(optarg);                          bits = atoi(optarg);
Line 677 
Line 714 
                         exit(0);                          exit(0);
                         break;                          break;
   
                   case 'e':
                 case 'x':                  case 'x':
                           /* export key */
                         convert_to_ssh2 = 1;                          convert_to_ssh2 = 1;
                         break;                          break;
   
                   case 'i':
                 case 'X':                  case 'X':
                           /* import key */
                         convert_from_ssh2 = 1;                          convert_from_ssh2 = 1;
                         break;                          break;
   
Line 795 
Line 836 
   
         /* Save the key with the given passphrase and comment. */          /* Save the key with the given passphrase and comment. */
         if (!key_save_private(private, identity_file, passphrase1, comment)) {          if (!key_save_private(private, identity_file, passphrase1, comment)) {
                 printf("Saving the key failed: %s: %s.\n",                  printf("Saving the key failed: %s.\n", identity_file);
                     identity_file, strerror(errno));  
                 memset(passphrase1, 0, strlen(passphrase1));                  memset(passphrase1, 0, strlen(passphrase1));
                 xfree(passphrase1);                  xfree(passphrase1);
                 exit(1);                  exit(1);

Legend:
Removed from v.1.52  
changed lines
  Added in v.1.61