Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/ttssh2/ttxssh/key.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9254 by nmaya, Wed Dec 16 12:24:13 2020 UTC revision 9255 by nmaya, Wed May 19 14:11:26 2021 UTC
# Line 392  int ssh_ecdsa_verify(EC_KEY *key, ssh_ke Line 392  int ssh_ecdsa_verify(EC_KEY *key, ssh_ke
392    
393          len = get_uint32_MSBfirst(ptr);          len = get_uint32_MSBfirst(ptr);
394          ptr += 4;          ptr += 4;
395          if (strncmp(get_ssh_keytype_name(keytype), ptr, len) != 0) {          if (strncmp(get_ssh2_hostkey_type_name(keytype), ptr, len) != 0) {
396                  ret = -3;                  ret = -3;
397                  goto error;                  goto error;
398          }          }
# Line 448  error: Line 448  error:
448  }  }
449    
450  static int ssh_ed25519_verify(Key *key, unsigned char *signature, unsigned int signaturelen,  static int ssh_ed25519_verify(Key *key, unsigned char *signature, unsigned int signaturelen,
451                                                            unsigned char *data, unsigned int datalen)                                unsigned char *data, unsigned int datalen)
452  {  {
453          buffer_t *b;          buffer_t *b;
454          char *ktype = NULL;          char *ktype = NULL;
# Line 979  key_fingerprint_randomart(const char *al Line 979  key_fingerprint_randomart(const char *al
979  //  //
980  // fingerprint(指紋:ホスト公開鍵のハッシュ)を生成する  // fingerprint(指紋:ホスト公開鍵のハッシュ)を生成する
981  //  //
982  char *key_fingerprint(Key *key, enum fp_rep dgst_rep, digest_algorithm dgst_alg)  char *key_fingerprint(Key *key, fp_rep dgst_rep, digest_algorithm dgst_alg)
983  {  {
984          char *retval = NULL, *alg;          char *retval = NULL, *alg;
985          unsigned char *dgst_raw;          unsigned char *dgst_raw;
# Line 1240  void key_init(Key *key) Line 1240  void key_init(Key *key)
1240          }          }
1241  }  }
1242    
 //  
 // キーから文字列を返却する  
 //  
 char *get_sshname_from_key(Key *key)  
 {  
         return get_ssh_keytype_name(key->type);  
 }  
   
 //  
 // キー文字列から種別を判定する  
 //  
 ssh_keytype get_keytype_from_name(char *name)  
 {  
         if (strcmp(name, "rsa1") == 0) {  
                 return KEY_RSA1;  
         } else if (strcmp(name, "rsa") == 0) {  
                 return KEY_RSA;  
         } else if (strcmp(name, "dsa") == 0) {  
                 return KEY_DSA;  
         } else if (strcmp(name, "ssh-rsa") == 0) {  
                 return KEY_RSA;  
         } else if (strcmp(name, "ssh-dss") == 0) {  
                 return KEY_DSA;  
         } else if (strcmp(name, "ecdsa-sha2-nistp256") == 0) {  
                 return KEY_ECDSA256;  
         } else if (strcmp(name, "ecdsa-sha2-nistp384") == 0) {  
                 return KEY_ECDSA384;  
         } else if (strcmp(name, "ecdsa-sha2-nistp521") == 0) {  
                 return KEY_ECDSA521;  
         } else if (strcmp(name, "ssh-ed25519") == 0) {  
                 return KEY_ED25519;  
         }  
         return KEY_UNSPEC;  
 }  
   
   
1243  ssh_keytype key_curve_name_to_keytype(char *name)  ssh_keytype key_curve_name_to_keytype(char *name)
1244  {  {
1245          if (strcmp(name, "nistp256") == 0) {          if (strcmp(name, "nistp256") == 0) {
# Line 1318  int key_to_blob(Key *key, char **blobp, Line 1282  int key_to_blob(Key *key, char **blobp,
1282          BIGNUM *p, *q, *g, *pub_key;          BIGNUM *p, *q, *g, *pub_key;
1283    
1284          b = buffer_init();          b = buffer_init();
1285          sshname = get_sshname_from_key(key);          sshname = get_ssh2_hostkey_type_name_from_key(key);
1286    
1287          switch (key->type) {          switch (key->type) {
1288          case KEY_RSA:          case KEY_RSA:
# Line 1411  Key *key_from_blob(char *data, int blen) Line 1375  Key *key_from_blob(char *data, int blen)
1375          key[keynamelen] = 0;          key[keynamelen] = 0;
1376          data += keynamelen;          data += keynamelen;
1377    
1378          type = get_keytype_from_name(key);          type = get_hostkey_type_from_name(key);
1379    
1380          switch (type) {          switch (type) {
1381          case KEY_RSA: // RSA key          case KEY_RSA: // RSA key
# Line 1618  BOOL generate_SSH2_keysign(Key *keypair, Line 1582  BOOL generate_SSH2_keysign(Key *keypair,
1582    
1583                  }                  }
1584    
1585                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1586                  buffer_put_string(msg, s, strlen(s));                  buffer_put_string(msg, s, strlen(s));
1587                  buffer_append_length(msg, sig, slen);                  buffer_append_length(msg, sig, slen);
1588                  len = buffer_len(msg);                  len = buffer_len(msg);
# Line 1676  BOOL generate_SSH2_keysign(Key *keypair, Line 1640  BOOL generate_SSH2_keysign(Key *keypair,
1640                  DSA_SIG_free(sig);                  DSA_SIG_free(sig);
1641    
1642                  // setting                  // setting
1643                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1644                  buffer_put_string(msg, s, strlen(s));                  buffer_put_string(msg, s, strlen(s));
1645                  buffer_append_length(msg, sigblob, sizeof(sigblob));                  buffer_append_length(msg, sigblob, sizeof(sigblob));
1646                  len = buffer_len(msg);                  len = buffer_len(msg);
# Line 1735  BOOL generate_SSH2_keysign(Key *keypair, Line 1699  BOOL generate_SSH2_keysign(Key *keypair,
1699                  buffer_put_bignum2(buf2, bs);                  buffer_put_bignum2(buf2, bs);
1700                  ECDSA_SIG_free(sig);                  ECDSA_SIG_free(sig);
1701    
1702                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1703                  buffer_put_string(msg, s, strlen(s));                  buffer_put_string(msg, s, strlen(s));
1704                  buffer_put_string(msg, buffer_ptr(buf2), buffer_len(buf2));                  buffer_put_string(msg, buffer_ptr(buf2), buffer_len(buf2));
1705                  buffer_free(buf2);                  buffer_free(buf2);
# Line 1791  BOOL get_SSH2_publickey_blob(PTInstVar p Line 1755  BOOL get_SSH2_publickey_blob(PTInstVar p
1755    
1756          switch (keypair->type) {          switch (keypair->type) {
1757          case KEY_RSA: // RSA          case KEY_RSA: // RSA
1758                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1759                  RSA_get0_key(keypair->rsa, &n, &e, NULL);                  RSA_get0_key(keypair->rsa, &n, &e, NULL);
1760                  buffer_put_string(msg, s, strlen(s));                  buffer_put_string(msg, s, strlen(s));
1761                  buffer_put_bignum2(msg, e); // 公開指数                  buffer_put_bignum2(msg, e); // 公開指数
# Line 1800  BOOL get_SSH2_publickey_blob(PTInstVar p Line 1764  BOOL get_SSH2_publickey_blob(PTInstVar p
1764          case KEY_DSA: // DSA          case KEY_DSA: // DSA
1765                  DSA_get0_pqg(keypair->dsa, &p, &q, &g);                  DSA_get0_pqg(keypair->dsa, &p, &q, &g);
1766                  DSA_get0_key(keypair->dsa, &pub_key, NULL);                  DSA_get0_key(keypair->dsa, &pub_key, NULL);
1767                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1768                  buffer_put_string(msg, s, strlen(s));                  buffer_put_string(msg, s, strlen(s));
1769                  buffer_put_bignum2(msg, p); // 素数                  buffer_put_bignum2(msg, p); // 素数
1770                  buffer_put_bignum2(msg, q); // (p-1)の素因数                  buffer_put_bignum2(msg, q); // (p-1)の素因数
# Line 1810  BOOL get_SSH2_publickey_blob(PTInstVar p Line 1774  BOOL get_SSH2_publickey_blob(PTInstVar p
1774          case KEY_ECDSA256: // ECDSA          case KEY_ECDSA256: // ECDSA
1775          case KEY_ECDSA384:          case KEY_ECDSA384:
1776          case KEY_ECDSA521:          case KEY_ECDSA521:
1777                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1778                  buffer_put_string(msg, s, strlen(s));                  buffer_put_string(msg, s, strlen(s));
1779                  tmp = curve_keytype_to_name(keypair->type);                  tmp = curve_keytype_to_name(keypair->type);
1780                  buffer_put_string(msg, tmp, strlen(tmp));                  buffer_put_string(msg, tmp, strlen(tmp));
# Line 1818  BOOL get_SSH2_publickey_blob(PTInstVar p Line 1782  BOOL get_SSH2_publickey_blob(PTInstVar p
1782                                          EC_KEY_get0_public_key(keypair->ecdsa));                                          EC_KEY_get0_public_key(keypair->ecdsa));
1783                  break;                  break;
1784          case KEY_ED25519:          case KEY_ED25519:
1785                  s = get_sshname_from_key(keypair);                  s = get_ssh2_hostkey_type_name_from_key(keypair);
1786                  buffer_put_cstring(msg, s);                  buffer_put_cstring(msg, s);
1787                  buffer_put_string(msg, keypair->ed25519_pk, ED25519_PK_SZ);                  buffer_put_string(msg, keypair->ed25519_pk, ED25519_PK_SZ);
1788                  break;                  break;
# Line 1890  void key_private_serialize(Key *key, buf Line 1854  void key_private_serialize(Key *key, buf
1854          BIGNUM *e, *n, *d, *iqmp, *p, *q;          BIGNUM *e, *n, *d, *iqmp, *p, *q;
1855          BIGNUM *g, *pub_key, *priv_key;          BIGNUM *g, *pub_key, *priv_key;
1856                    
1857          s = get_sshname_from_key(key);          s = get_ssh2_hostkey_type_name_from_key(key);
1858          buffer_put_cstring(b, s);          buffer_put_cstring(b, s);
1859    
1860          switch (key->type) {          switch (key->type) {
# Line 1978  Key *key_private_deserialize(buffer_t *b Line 1942  Key *key_private_deserialize(buffer_t *b
1942          type_name = buffer_get_string_msg(blob, NULL);          type_name = buffer_get_string_msg(blob, NULL);
1943          if (type_name == NULL)          if (type_name == NULL)
1944                  goto error;                  goto error;
1945          type = get_keytype_from_name(type_name);          type = get_hostkey_type_from_name(type_name);
1946    
1947          k = key_new_private(type);          k = key_new_private(type);
1948    
# Line 2242  static int check_hostkey_algorithm(PTIns Line 2206  static int check_hostkey_algorithm(PTIns
2206                  if (index == KEY_NONE) // disabled line                  if (index == KEY_NONE) // disabled line
2207                          break;                          break;
2208    
2209                  if (strcmp(get_sshname_from_key(key), get_ssh_keytype_name(index)) == 0)                  if (strcmp(get_ssh2_hostkey_type_name_from_key(key),
2210                               get_ssh2_hostkey_type_name(index)) == 0)
2211                          return 1;                          return 1;
2212          }          }
2213    
# Line 2314  static void hosts_updatekey_dlg_set_fing Line 2279  static void hosts_updatekey_dlg_set_fing
2279                                  fp = key_fingerprint(ctx->keys[i], SSH_FP_BASE64, SSH_DIGEST_SHA256);                                  fp = key_fingerprint(ctx->keys[i], SSH_FP_BASE64, SSH_DIGEST_SHA256);
2280                                  break;                                  break;
2281                          }                          }
2282                          strncat_s(buf, buf_len, get_sshname_from_key(ctx->keys[i]), _TRUNCATE);                          strncat_s(buf, buf_len, get_ssh2_hostkey_type_name_from_key(ctx->keys[i]), _TRUNCATE);
2283                          strncat_s(buf, buf_len, " ", _TRUNCATE);                          strncat_s(buf, buf_len, " ", _TRUNCATE);
2284                          if (fp != NULL) {                          if (fp != NULL) {
2285                                  strncat_s(buf, buf_len, fp, _TRUNCATE);                                  strncat_s(buf, buf_len, fp, _TRUNCATE);
# Line 2342  static void hosts_updatekey_dlg_set_fing Line 2307  static void hosts_updatekey_dlg_set_fing
2307                                  fp = key_fingerprint(ctx->old_keys[i], SSH_FP_BASE64, SSH_DIGEST_SHA256);                                  fp = key_fingerprint(ctx->old_keys[i], SSH_FP_BASE64, SSH_DIGEST_SHA256);
2308                                  break;                                  break;
2309                          }                          }
2310                          strncat_s(buf, buf_len, get_sshname_from_key(ctx->old_keys[i]), _TRUNCATE);                          strncat_s(buf, buf_len, get_ssh2_hostkey_type_name_from_key(ctx->old_keys[i]), _TRUNCATE);
2311                          strncat_s(buf, buf_len, " ", _TRUNCATE);                          strncat_s(buf, buf_len, " ", _TRUNCATE);
2312                          if (fp != NULL) {                          if (fp != NULL) {
2313                                  strncat_s(buf, buf_len, fp, _TRUNCATE);                                  strncat_s(buf, buf_len, fp, _TRUNCATE);
# Line 2557  static void client_global_hostkeys_priva Line 2522  static void client_global_hostkeys_priva
2522                  if (ret != 1) {                  if (ret != 1) {
2523                          logprintf(LOG_LEVEL_ERROR,                          logprintf(LOG_LEVEL_ERROR,
2524                                  "server gave bad signature for %s key %u",                                  "server gave bad signature for %s key %u",
2525                                  get_sshname_from_key(ctx->keys[i]), i);                                  get_ssh2_hostkey_type_name_from_key(ctx->keys[i]), i);
2526                          goto error;                          goto error;
2527                  }                  }
2528                  ndone++;                  ndone++;
# Line 2628  int update_client_input_hostkeys(PTInstV Line 2593  int update_client_input_hostkeys(PTInstV
2593                  blob = NULL;                  blob = NULL;
2594    
2595                  fp = key_fingerprint(key, SSH_FP_HEX, SSH_DIGEST_MD5);                  fp = key_fingerprint(key, SSH_FP_HEX, SSH_DIGEST_MD5);
2596                  logprintf(LOG_LEVEL_VERBOSE, "Received %s host key %s", get_sshname_from_key(key), fp);                  logprintf(LOG_LEVEL_VERBOSE, "Received %s host key %s",
2597                              get_ssh2_hostkey_type_name_from_key(key), fp);
2598                  free(fp);                  free(fp);
2599    
2600                  // 許可されたホストキーアルゴリズムかをチェックする。                  // 許可されたホストキーアルゴリズムかをチェックする。
2601                  if (check_hostkey_algorithm(pvar, key) == 0) {                  if (check_hostkey_algorithm(pvar, key) == 0) {
2602                          logprintf(LOG_LEVEL_VERBOSE, "%s host key is not permitted by ts.HostKeyOrder",                          logprintf(LOG_LEVEL_VERBOSE, "%s host key is not permitted by ts.HostKeyOrder",
2603                                  get_sshname_from_key(key));                                    get_ssh2_hostkey_type_name_from_key(key));
2604                          continue;                          continue;
2605                  }                  }
2606    
# Line 2644  int update_client_input_hostkeys(PTInstV Line 2610  int update_client_input_hostkeys(PTInstV
2610                  for (i = 0; i < ctx->nkeys; i++) {                  for (i = 0; i < ctx->nkeys; i++) {
2611                          if (HOSTS_compare_public_key(key, ctx->keys[i]) == 1) {                          if (HOSTS_compare_public_key(key, ctx->keys[i]) == 1) {
2612                                  logprintf(LOG_LEVEL_ERROR, "Received duplicated %s host key",                                  logprintf(LOG_LEVEL_ERROR, "Received duplicated %s host key",
2613                                          get_sshname_from_key(key));                                            get_ssh2_hostkey_type_name_from_key(key));
2614                                  goto error;                                  goto error;
2615                          }                          }
2616                  }                  }

Legend:
Removed from v.9254  
changed lines
  Added in v.9255

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26