Develop and Download Open Source Software

Browse Subversion Repository

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

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

revision 4307 by maya, Tue Feb 15 09:00:01 2011 UTC revision 4321 by maya, Sat Feb 19 07:41:41 2011 UTC
# Line 642  static int check_host_key(PTInstVar pvar Line 642  static int check_host_key(PTInstVar pvar
642                          pvar->hosts_state.hostkey.type = key->type;                          pvar->hosts_state.hostkey.type = key->type;
643                          pvar->hosts_state.hostkey.dsa = key->dsa;                          pvar->hosts_state.hostkey.dsa = key->dsa;
644                          pvar->hosts_state.hostkey.rsa = key->rsa;                          pvar->hosts_state.hostkey.rsa = key->rsa;
645                            pvar->hosts_state.hostkey.ecdsa = key->ecdsa;
646    
647                          index += eat_base64(data + index);                          index += eat_base64(data + index);
648                          index += eat_spaces(data + index);                          index += eat_spaces(data + index);
# Line 791  static BOOL match_key(PTInstVar pvar, Ke Line 792  static BOOL match_key(PTInstVar pvar, Ke
792          int bits;          int bits;
793          unsigned char FAR * exp;          unsigned char FAR * exp;
794          unsigned char FAR * mod;          unsigned char FAR * mod;
795            const EC_GROUP *group;
796            const EC_POINT *pa, *pb;
797    
798          if (key->type == KEY_RSA1) {  // SSH1 host public key          switch (key->type) {
799            case KEY_RSA1: // SSH1 host public key
800                  bits = key->bits;                  bits = key->bits;
801                  exp = key->exp;                  exp = key->exp;
802                  mod = key->mod;                  mod = key->mod;
# Line 805  static BOOL match_key(PTInstVar pvar, Ke Line 809  static BOOL match_key(PTInstVar pvar, Ke
809                          && equal_mp_ints(mod, pvar->hosts_state.key_mod);                          && equal_mp_ints(mod, pvar->hosts_state.key_mod);
810                          */                          */
811    
812          } else if (key->type == KEY_RSA) {  // SSH2 RSA host public key          case KEY_RSA: // SSH2 RSA host public key
   
813                  return key->rsa != NULL && pvar->hosts_state.hostkey.rsa != NULL &&                  return key->rsa != NULL && pvar->hosts_state.hostkey.rsa != NULL &&
814                         BN_cmp(key->rsa->e, pvar->hosts_state.hostkey.rsa->e) == 0 &&                         BN_cmp(key->rsa->e, pvar->hosts_state.hostkey.rsa->e) == 0 &&
815                         BN_cmp(key->rsa->n, pvar->hosts_state.hostkey.rsa->n) == 0;                         BN_cmp(key->rsa->n, pvar->hosts_state.hostkey.rsa->n) == 0;
816    
817          } else if (key->type == KEY_DSA) {  // SSH2 DSA host public key          case KEY_DSA: // SSH2 DSA host public key
   
818                  return key->dsa != NULL && pvar->hosts_state.hostkey.dsa &&                  return key->dsa != NULL && pvar->hosts_state.hostkey.dsa &&
819                         BN_cmp(key->dsa->p, pvar->hosts_state.hostkey.dsa->p) == 0 &&                         BN_cmp(key->dsa->p, pvar->hosts_state.hostkey.dsa->p) == 0 &&
820                         BN_cmp(key->dsa->q, pvar->hosts_state.hostkey.dsa->q) == 0 &&                         BN_cmp(key->dsa->q, pvar->hosts_state.hostkey.dsa->q) == 0 &&
821                         BN_cmp(key->dsa->g, pvar->hosts_state.hostkey.dsa->g) == 0 &&                         BN_cmp(key->dsa->g, pvar->hosts_state.hostkey.dsa->g) == 0 &&
822                         BN_cmp(key->dsa->pub_key, pvar->hosts_state.hostkey.dsa->pub_key) == 0;                         BN_cmp(key->dsa->pub_key, pvar->hosts_state.hostkey.dsa->pub_key) == 0;
823    
824          }          case KEY_ECDSA256:
825          else {          case KEY_ECDSA384:
826            case KEY_ECDSA521:
827                    if (key->ecdsa == NULL || pvar->hosts_state.hostkey.ecdsa == NULL) {
828                            return FALSE;
829                    }
830                    group = EC_KEY_get0_group(key->ecdsa);
831                    pa = EC_KEY_get0_public_key(key->ecdsa),
832                    pb = EC_KEY_get0_public_key(pvar->hosts_state.hostkey.ecdsa);
833                    return EC_POINT_cmp(group, pa, pb, NULL) == 0;
834    
835            default:
836                  return FALSE;                  return FALSE;
837          }          }
838    
# Line 894  static char FAR *format_host_key(PTInstV Line 906  static char FAR *format_host_key(PTInstV
906          int index;          int index;
907          enum ssh_keytype type = pvar->hosts_state.hostkey.type;          enum ssh_keytype type = pvar->hosts_state.hostkey.type;
908    
909          if (type == KEY_RSA1) {          switch (type) {
910            case KEY_RSA1:
911            {
912                  int result_len = host_len + 50 + 8 +                  int result_len = host_len + 50 + 8 +
913                                   get_ushort16_MSBfirst(pvar->hosts_state.hostkey.exp) / 3 +                                   get_ushort16_MSBfirst(pvar->hosts_state.hostkey.exp) / 3 +
914                                   get_ushort16_MSBfirst(pvar->hosts_state.hostkey.mod) / 3;                                   get_ushort16_MSBfirst(pvar->hosts_state.hostkey.mod) / 3;
# Line 920  static char FAR *format_host_key(PTInstV Line 934  static char FAR *format_host_key(PTInstV
934                  index += print_mp_int(result + index, pvar->hosts_state.hostkey.mod);                  index += print_mp_int(result + index, pvar->hosts_state.hostkey.mod);
935                  strncpy_s(result + index, result_len - index, " \r\n", _TRUNCATE);                  strncpy_s(result + index, result_len - index, " \r\n", _TRUNCATE);
936    
937          } else if (type == KEY_RSA || type == KEY_DSA) {                  break;
938            }
939    
940            case KEY_RSA:
941            case KEY_DSA:
942            case KEY_ECDSA256:
943            case KEY_ECDSA384:
944            case KEY_ECDSA521:
945            {
946                  Key *key = &pvar->hosts_state.hostkey;                  Key *key = &pvar->hosts_state.hostkey;
947                  char *blob = NULL;                  char *blob = NULL;
948                  int blen, uulen, msize;                  int blen, uulen, msize;
# Line 961  error: Line 983  error:
983                  if (uu != NULL)                  if (uu != NULL)
984                          free(uu);                          free(uu);
985    
986          } else {                  break;
987            }
988    
989            default:
990                  return NULL;                  return NULL;
991    
992          }          }
# Line 1082  static void delete_different_key(PTInstV Line 1107  static void delete_different_key(PTInstV
1107                  }                  }
1108    
1109                  // 接続中のサーバのキーを読み込む                  // 接続中のサーバのキーを読み込む
1110                  if (pvar->hosts_state.hostkey.type == KEY_RSA1) { // SSH1                  switch (pvar->hosts_state.hostkey.type) {
1111                    case KEY_RSA1: // SSH1
1112                          key.type = KEY_RSA1;                          key.type = KEY_RSA1;
1113                          key.bits = pvar->hosts_state.hostkey.bits;                          key.bits = pvar->hosts_state.hostkey.bits;
1114                          key.exp = copy_mp_int(pvar->hosts_state.hostkey.exp);                          key.exp = copy_mp_int(pvar->hosts_state.hostkey.exp);
1115                          key.mod = copy_mp_int(pvar->hosts_state.hostkey.mod);                          key.mod = copy_mp_int(pvar->hosts_state.hostkey.mod);
1116                  } else if (pvar->hosts_state.hostkey.type == KEY_RSA) { // SSH2 RSA                          break;
1117                    case KEY_RSA: // SSH2 RSA
1118                          key.type = KEY_RSA;                          key.type = KEY_RSA;
1119                          key.rsa = duplicate_RSA(pvar->hosts_state.hostkey.rsa);                          key.rsa = duplicate_RSA(pvar->hosts_state.hostkey.rsa);
1120                  } else { // SSH2 DSA                          break;
1121                    case KEY_DSA: // SSH2 DSA
1122                          key.type = KEY_DSA;                          key.type = KEY_DSA;
1123                          key.dsa = duplicate_DSA(pvar->hosts_state.hostkey.dsa);                          key.dsa = duplicate_DSA(pvar->hosts_state.hostkey.dsa);
1124                            break;
1125                    case KEY_ECDSA256:
1126                    case KEY_ECDSA384:
1127                    case KEY_ECDSA521:
1128                            key.type = pvar->hosts_state.hostkey.type;
1129                            key.ecdsa = EC_KEY_dup(pvar->hosts_state.hostkey.ecdsa);
1130                            break;
1131                  }                  }
1132    
1133                  // ファイルから読み込む                  // ファイルから読み込む
# Line 1532  BOOL HOSTS_check_host_key(PTInstVar pvar Line 1567  BOOL HOSTS_check_host_key(PTInstVar pvar
1567    
1568          // known_hosts に存在しないキーはあとでファイルへ書き込むために、ここで保存しておく。          // known_hosts に存在しないキーはあとでファイルへ書き込むために、ここで保存しておく。
1569          pvar->hosts_state.hostkey.type = key->type;          pvar->hosts_state.hostkey.type = key->type;
1570          if (key->type == KEY_RSA1) { // SSH1          switch (key->type) {
1571            case KEY_RSA1: // SSH1
1572                  pvar->hosts_state.hostkey.bits = key->bits;                  pvar->hosts_state.hostkey.bits = key->bits;
1573                  pvar->hosts_state.hostkey.exp = copy_mp_int(key->exp);                  pvar->hosts_state.hostkey.exp = copy_mp_int(key->exp);
1574                  pvar->hosts_state.hostkey.mod = copy_mp_int(key->mod);                  pvar->hosts_state.hostkey.mod = copy_mp_int(key->mod);
1575                    break;
1576          } else if (key->type == KEY_RSA) { // SSH2 RSA          case KEY_RSA: // SSH2 RSA
1577                  pvar->hosts_state.hostkey.rsa = duplicate_RSA(key->rsa);                  pvar->hosts_state.hostkey.rsa = duplicate_RSA(key->rsa);
1578                    break;
1579          } else { // SSH2 DSA          case KEY_DSA: // SSH2 DSA
1580                  pvar->hosts_state.hostkey.dsa = duplicate_DSA(key->dsa);                  pvar->hosts_state.hostkey.dsa = duplicate_DSA(key->dsa);
1581                    break;
1582            case KEY_ECDSA256: // SSH2 ECDSA
1583            case KEY_ECDSA384:
1584            case KEY_ECDSA521:
1585                    pvar->hosts_state.hostkey.ecdsa = EC_KEY_dup(key->ecdsa);
1586                    break;
1587          }          }
1588          free(pvar->hosts_state.prefetched_hostname);          free(pvar->hosts_state.prefetched_hostname);
1589          pvar->hosts_state.prefetched_hostname = _strdup(hostname);          pvar->hosts_state.prefetched_hostname = _strdup(hostname);

Legend:
Removed from v.4307  
changed lines
  Added in v.4321

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