[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.467 and 1.472

version 1.467, 2023/04/12 08:53:54 version 1.472, 2024/01/11 01:45:36
Line 61 
Line 61 
 #include "ssh-pkcs11.h"  #include "ssh-pkcs11.h"
 #endif  #endif
   
 #ifdef WITH_OPENSSL  #define DEFAULT_KEY_TYPE_NAME "ed25519"
 # define DEFAULT_KEY_TYPE_NAME "rsa"  
 #else  
 # define DEFAULT_KEY_TYPE_NAME "ed25519"  
 #endif  
   
 /*  /*
  * Default number of bits in the RSA, DSA and ECDSA keys.  These value can be   * Default number of bits in the RSA, DSA and ECDSA keys.  These value can be
Line 252 
Line 248 
         char *name = NULL;          char *name = NULL;
   
         if (key_type_name == NULL)          if (key_type_name == NULL)
                 name = _PATH_SSH_CLIENT_ID_RSA;                  name = _PATH_SSH_CLIENT_ID_ED25519;
         else {          else {
                 switch (sshkey_type_from_name(key_type_name)) {                  switch (sshkey_type_from_name(key_type_name)) {
   #ifdef WITH_DSA
                 case KEY_DSA_CERT:                  case KEY_DSA_CERT:
                 case KEY_DSA:                  case KEY_DSA:
                         name = _PATH_SSH_CLIENT_ID_DSA;                          name = _PATH_SSH_CLIENT_ID_DSA;
                         break;                          break;
   #endif
                 case KEY_ECDSA_CERT:                  case KEY_ECDSA_CERT:
                 case KEY_ECDSA:                  case KEY_ECDSA:
                         name = _PATH_SSH_CLIENT_ID_ECDSA;                          name = _PATH_SSH_CLIENT_ID_ECDSA;
Line 367 
Line 365 
                 if (!PEM_write_RSA_PUBKEY(stdout, k->rsa))                  if (!PEM_write_RSA_PUBKEY(stdout, k->rsa))
                         fatal("PEM_write_RSA_PUBKEY failed");                          fatal("PEM_write_RSA_PUBKEY failed");
                 break;                  break;
   #ifdef WITH_DSA
         case KEY_DSA:          case KEY_DSA:
                 if (!PEM_write_DSA_PUBKEY(stdout, k->dsa))                  if (!PEM_write_DSA_PUBKEY(stdout, k->dsa))
                         fatal("PEM_write_DSA_PUBKEY failed");                          fatal("PEM_write_DSA_PUBKEY failed");
                 break;                  break;
   #endif
         case KEY_ECDSA:          case KEY_ECDSA:
                 if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))                  if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))
                         fatal("PEM_write_EC_PUBKEY failed");                          fatal("PEM_write_EC_PUBKEY failed");
Line 389 
Line 389 
                 if (!PEM_write_RSAPublicKey(stdout, k->rsa))                  if (!PEM_write_RSAPublicKey(stdout, k->rsa))
                         fatal("PEM_write_RSAPublicKey failed");                          fatal("PEM_write_RSAPublicKey failed");
                 break;                  break;
   #ifdef WITH_DSA
         case KEY_DSA:          case KEY_DSA:
                 if (!PEM_write_DSA_PUBKEY(stdout, k->dsa))                  if (!PEM_write_DSA_PUBKEY(stdout, k->dsa))
                         fatal("PEM_write_DSA_PUBKEY failed");                          fatal("PEM_write_DSA_PUBKEY failed");
                 break;                  break;
   #endif
         case KEY_ECDSA:          case KEY_ECDSA:
                 if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))                  if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))
                         fatal("PEM_write_EC_PUBKEY failed");                          fatal("PEM_write_EC_PUBKEY failed");
Line 465 
Line 467 
         u_int magic, i1, i2, i3, i4;          u_int magic, i1, i2, i3, i4;
         size_t slen;          size_t slen;
         u_long e;          u_long e;
   #ifdef WITH_DSA
         BIGNUM *dsa_p = NULL, *dsa_q = NULL, *dsa_g = NULL;          BIGNUM *dsa_p = NULL, *dsa_q = NULL, *dsa_g = NULL;
         BIGNUM *dsa_pub_key = NULL, *dsa_priv_key = NULL;          BIGNUM *dsa_pub_key = NULL, *dsa_priv_key = NULL;
   #endif
         BIGNUM *rsa_n = NULL, *rsa_e = NULL, *rsa_d = NULL;          BIGNUM *rsa_n = NULL, *rsa_e = NULL, *rsa_d = NULL;
         BIGNUM *rsa_p = NULL, *rsa_q = NULL, *rsa_iqmp = NULL;          BIGNUM *rsa_p = NULL, *rsa_q = NULL, *rsa_iqmp = NULL;
   
Line 494 
Line 498 
         }          }
         free(cipher);          free(cipher);
   
         if (strstr(type, "dsa")) {          if (strstr(type, "rsa")) {
                 ktype = KEY_DSA;  
         } else if (strstr(type, "rsa")) {  
                 ktype = KEY_RSA;                  ktype = KEY_RSA;
   #ifdef WITH_DSA
           } else if (strstr(type, "dsa")) {
                   ktype = KEY_DSA;
   #endif
         } else {          } else {
                 free(type);                  free(type);
                 return NULL;                  return NULL;
Line 507 
Line 513 
         free(type);          free(type);
   
         switch (key->type) {          switch (key->type) {
   #ifdef WITH_DSA
         case KEY_DSA:          case KEY_DSA:
                 if ((dsa_p = BN_new()) == NULL ||                  if ((dsa_p = BN_new()) == NULL ||
                     (dsa_q = BN_new()) == NULL ||                      (dsa_q = BN_new()) == NULL ||
Line 526 
Line 533 
                         fatal_f("DSA_set0_key failed");                          fatal_f("DSA_set0_key failed");
                 dsa_pub_key = dsa_priv_key = NULL; /* transferred */                  dsa_pub_key = dsa_priv_key = NULL; /* transferred */
                 break;                  break;
   #endif
         case KEY_RSA:          case KEY_RSA:
                 if ((r = sshbuf_get_u8(b, &e1)) != 0 ||                  if ((r = sshbuf_get_u8(b, &e1)) != 0 ||
                     (e1 < 30 && (r = sshbuf_get_u8(b, &e2)) != 0) ||                      (e1 < 30 && (r = sshbuf_get_u8(b, &e2)) != 0) ||
Line 689 
Line 697 
                 (*k)->type = KEY_RSA;                  (*k)->type = KEY_RSA;
                 (*k)->rsa = EVP_PKEY_get1_RSA(pubkey);                  (*k)->rsa = EVP_PKEY_get1_RSA(pubkey);
                 break;                  break;
   #ifdef WITH_DSA
         case EVP_PKEY_DSA:          case EVP_PKEY_DSA:
                 if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)                  if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
                         fatal("sshkey_new failed");                          fatal("sshkey_new failed");
                 (*k)->type = KEY_DSA;                  (*k)->type = KEY_DSA;
                 (*k)->dsa = EVP_PKEY_get1_DSA(pubkey);                  (*k)->dsa = EVP_PKEY_get1_DSA(pubkey);
                 break;                  break;
   #endif
         case EVP_PKEY_EC:          case EVP_PKEY_EC:
                 if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)                  if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
                         fatal("sshkey_new failed");                          fatal("sshkey_new failed");
Line 762 
Line 772 
                         fprintf(stdout, "\n");                          fprintf(stdout, "\n");
         } else {          } else {
                 switch (k->type) {                  switch (k->type) {
   #ifdef WITH_DSA
                 case KEY_DSA:                  case KEY_DSA:
                         ok = PEM_write_DSAPrivateKey(stdout, k->dsa, NULL,                          ok = PEM_write_DSAPrivateKey(stdout, k->dsa, NULL,
                             NULL, 0, NULL, NULL);                              NULL, 0, NULL, NULL);
                         break;                          break;
   #endif
                 case KEY_ECDSA:                  case KEY_ECDSA:
                         ok = PEM_write_ECPrivateKey(stdout, k->ecdsa, NULL,                          ok = PEM_write_ECPrivateKey(stdout, k->ecdsa, NULL,
                             NULL, 0, NULL, NULL);                              NULL, 0, NULL, NULL);
Line 976 
Line 988 
                  * accept a public key prefixed with a hostname or options.                   * accept a public key prefixed with a hostname or options.
                  * Try a bare key first, otherwise skip the leading stuff.                   * Try a bare key first, otherwise skip the leading stuff.
                  */                   */
                   comment = NULL;
                 if ((public = try_read_key(&cp)) == NULL) {                  if ((public = try_read_key(&cp)) == NULL) {
                         i = strtol(cp, &ep, 10);                          i = strtol(cp, &ep, 10);
                         if (i == 0 || ep == NULL ||                          if (i == 0 || ep == NULL ||
Line 2199 
Line 2212 
         if ((r = sshbuf_load_file(path, &krlbuf)) != 0)          if ((r = sshbuf_load_file(path, &krlbuf)) != 0)
                 fatal_r(r, "Unable to load KRL %s", path);                  fatal_r(r, "Unable to load KRL %s", path);
         /* XXX check sigs */          /* XXX check sigs */
         if ((r = ssh_krl_from_blob(krlbuf, krlp, NULL, 0)) != 0 ||          if ((r = ssh_krl_from_blob(krlbuf, krlp)) != 0 ||
             *krlp == NULL)              *krlp == NULL)
                 fatal_r(r, "Invalid KRL file %s", path);                  fatal_r(r, "Invalid KRL file %s", path);
         sshbuf_free(krlbuf);          sshbuf_free(krlbuf);
Line 2222 
Line 2235 
          * OpenSSH base64 hashes omit trailing '='           * OpenSSH base64 hashes omit trailing '='
          * characters; put them back for decode.           * characters; put them back for decode.
          */           */
         tlen = strlen(cp);          if ((tlen = strlen(cp)) >= SIZE_MAX - 5)
                   fatal_f("hash too long: %zu bytes", tlen);
         tmp = xmalloc(tlen + 4 + 1);          tmp = xmalloc(tlen + 4 + 1);
         strlcpy(tmp, cp, tlen + 1);          strlcpy(tmp, cp, tlen + 1);
         while ((tlen % 4) != 0) {          while ((tlen % 4) != 0) {
Line 2264 
Line 2278 
         if (!quiet)          if (!quiet)
                 printf("Revoking from %s\n", path);                  printf("Revoking from %s\n", path);
         while (getline(&line, &linesize, krl_spec) != -1) {          while (getline(&line, &linesize, krl_spec) != -1) {
                   if (linesize >= INT_MAX) {
                           fatal_f("%s contains unparsable line, len=%zu",
                               path, linesize);
                   }
                 lnum++;                  lnum++;
                 was_explicit_key = was_sha1 = was_sha256 = was_hash = 0;                  was_explicit_key = was_sha1 = was_sha256 = was_hash = 0;
                 cp = line + strspn(line, " \t");                  cp = line + strspn(line, " \t");
Line 2437 
Line 2455 
   
         if ((kbuf = sshbuf_new()) == NULL)          if ((kbuf = sshbuf_new()) == NULL)
                 fatal("sshbuf_new failed");                  fatal("sshbuf_new failed");
         if (ssh_krl_to_blob(krl, kbuf, NULL, 0) != 0)          if (ssh_krl_to_blob(krl, kbuf) != 0)
                 fatal("Couldn't generate KRL");                  fatal("Couldn't generate KRL");
         if ((r = sshbuf_write_file(identity_file, kbuf)) != 0)          if ((r = sshbuf_write_file(identity_file, kbuf)) != 0)
                 fatal("write %s: %s", identity_file, strerror(errno));                  fatal("write %s: %s", identity_file, strerror(errno));
Line 3724 
Line 3742 
                         n += do_print_resource_record(pw,                          n += do_print_resource_record(pw,
                             _PATH_HOST_RSA_KEY_FILE, rr_hostname,                              _PATH_HOST_RSA_KEY_FILE, rr_hostname,
                             print_generic, opts, nopts);                              print_generic, opts, nopts);
   #ifdef WITH_DSA
                         n += do_print_resource_record(pw,                          n += do_print_resource_record(pw,
                             _PATH_HOST_DSA_KEY_FILE, rr_hostname,                              _PATH_HOST_DSA_KEY_FILE, rr_hostname,
                             print_generic, opts, nopts);                              print_generic, opts, nopts);
   #endif
                         n += do_print_resource_record(pw,                          n += do_print_resource_record(pw,
                             _PATH_HOST_ECDSA_KEY_FILE, rr_hostname,                              _PATH_HOST_ECDSA_KEY_FILE, rr_hostname,
                             print_generic, opts, nopts);                              print_generic, opts, nopts);

Legend:
Removed from v.1.467  
changed lines
  Added in v.1.472