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 5678 by maya, Sat Oct 4 03:39:24 2014 UTC revision 5843 by yutakapon, Fri May 1 07:44:21 2015 UTC
# Line 781  static BOOL equal_mp_ints(unsigned char Line 781  static BOOL equal_mp_ints(unsigned char
781          }          }
782  }  }
783    
784  // 公開鍵が等しいかを検証する  
785    // 公開鍵の比較を行う。
786    //
787    // return
788  //   -1 ... 鍵の型が違う  //   -1 ... 鍵の型が違う
789  //    0 ... 等しくない  //    0 ... 等しくない
790  //    1 ... 等しい  //    1 ... 等しい
791  static int match_key(PTInstVar pvar, Key *key)  int HOSTS_compare_public_key(Key *src, Key *key)
792  {  {
793          int bits;          int bits;
794          unsigned char FAR * exp;          unsigned char FAR * exp;
# Line 794  static int match_key(PTInstVar pvar, Key Line 797  static int match_key(PTInstVar pvar, Key
797          const EC_POINT *pa, *pb;          const EC_POINT *pa, *pb;
798          Key *a, *b;          Key *a, *b;
799    
800          if (pvar->hosts_state.hostkey.type != key->type) {          if (src->type != key->type) {
801                  return -1;                  return -1;
802          }          }
803    
# Line 805  static int match_key(PTInstVar pvar, Key Line 808  static int match_key(PTInstVar pvar, Key
808                  mod = key->mod;                  mod = key->mod;
809    
810                  /* just check for equal exponent and modulus */                  /* just check for equal exponent and modulus */
811                  return equal_mp_ints(exp, pvar->hosts_state.hostkey.exp)                  return equal_mp_ints(exp, src->exp)
812                      && equal_mp_ints(mod, pvar->hosts_state.hostkey.mod);                          && equal_mp_ints(mod, src->mod);
813                  /*                  /*
814                  return equal_mp_ints(exp, pvar->hosts_state.key_exp)                  return equal_mp_ints(exp, pvar->hosts_state.key_exp)
815                          && equal_mp_ints(mod, pvar->hosts_state.key_mod);                  && equal_mp_ints(mod, pvar->hosts_state.key_mod);
816                          */                  */
817    
818          case KEY_RSA: // SSH2 RSA host public key          case KEY_RSA: // SSH2 RSA host public key
819                  return key->rsa != NULL && pvar->hosts_state.hostkey.rsa != NULL &&                  return key->rsa != NULL && src->rsa != NULL &&
820                         BN_cmp(key->rsa->e, pvar->hosts_state.hostkey.rsa->e) == 0 &&                          BN_cmp(key->rsa->e, src->rsa->e) == 0 &&
821                         BN_cmp(key->rsa->n, pvar->hosts_state.hostkey.rsa->n) == 0;                          BN_cmp(key->rsa->n, src->rsa->n) == 0;
822    
823          case KEY_DSA: // SSH2 DSA host public key          case KEY_DSA: // SSH2 DSA host public key
824                  return key->dsa != NULL && pvar->hosts_state.hostkey.dsa &&                  return key->dsa != NULL && src->dsa &&
825                         BN_cmp(key->dsa->p, pvar->hosts_state.hostkey.dsa->p) == 0 &&                          BN_cmp(key->dsa->p, src->dsa->p) == 0 &&
826                         BN_cmp(key->dsa->q, pvar->hosts_state.hostkey.dsa->q) == 0 &&                          BN_cmp(key->dsa->q, src->dsa->q) == 0 &&
827                         BN_cmp(key->dsa->g, pvar->hosts_state.hostkey.dsa->g) == 0 &&                          BN_cmp(key->dsa->g, src->dsa->g) == 0 &&
828                         BN_cmp(key->dsa->pub_key, pvar->hosts_state.hostkey.dsa->pub_key) == 0;                          BN_cmp(key->dsa->pub_key, src->dsa->pub_key) == 0;
829    
830          case KEY_ECDSA256:          case KEY_ECDSA256:
831          case KEY_ECDSA384:          case KEY_ECDSA384:
832          case KEY_ECDSA521:          case KEY_ECDSA521:
833                  if (key->ecdsa == NULL || pvar->hosts_state.hostkey.ecdsa == NULL) {                  if (key->ecdsa == NULL || src->ecdsa == NULL) {
834                          return FALSE;                          return FALSE;
835                  }                  }
836                  group = EC_KEY_get0_group(key->ecdsa);                  group = EC_KEY_get0_group(key->ecdsa);
837                  pa = EC_KEY_get0_public_key(key->ecdsa),                  pa = EC_KEY_get0_public_key(key->ecdsa),
838                  pb = EC_KEY_get0_public_key(pvar->hosts_state.hostkey.ecdsa);                          pb = EC_KEY_get0_public_key(src->ecdsa);
839                  return EC_POINT_cmp(group, pa, pb, NULL) == 0;                  return EC_POINT_cmp(group, pa, pb, NULL) == 0;
840    
841          case KEY_ED25519:          case KEY_ED25519:
842                  a = key;                  a = key;
843                  b = &pvar->hosts_state.hostkey;                  b = src;
844                  return a->ed25519_pk != NULL && b->ed25519_pk != NULL &&                  return a->ed25519_pk != NULL && b->ed25519_pk != NULL &&
845                      memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0;                          memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0;
846    
847          default:          default:
848                  return FALSE;                  return FALSE;
849          }          }
850    }
851    
852    
853    // 公開鍵が等しいかを検証する
854    //   -1 ... 鍵の型が違う
855    //    0 ... 等しくない
856    //    1 ... 等しい
857    static int match_key(PTInstVar pvar, Key *key)
858    {
859            return HOSTS_compare_public_key(&pvar->hosts_state.hostkey, key);
860  }  }
861    
862  static void init_hosts_dlg(PTInstVar pvar, HWND dlg)  static void init_hosts_dlg(PTInstVar pvar, HWND dlg)

Legend:
Removed from v.5678  
changed lines
  Added in v.5843

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