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

Diff for /src/usr.bin/ssh/kex.c between version 1.56 and 1.56.2.1

version 1.56, 2003/11/21 11:57:03 version 1.56.2.1, 2004/08/19 04:13:26
Line 148 
Line 148 
 void  void
 kex_send_kexinit(Kex *kex)  kex_send_kexinit(Kex *kex)
 {  {
         u_int32_t rand = 0;          u_int32_t rnd = 0;
         u_char *cookie;          u_char *cookie;
         int i;          int i;
   
Line 168 
Line 168 
         cookie = buffer_ptr(&kex->my);          cookie = buffer_ptr(&kex->my);
         for (i = 0; i < KEX_COOKIE_LEN; i++) {          for (i = 0; i < KEX_COOKIE_LEN; i++) {
                 if (i % 4 == 0)                  if (i % 4 == 0)
                         rand = arc4random();                          rnd = arc4random();
                 cookie[i] = rand;                  cookie[i] = rnd;
                 rand >>= 8;                  rnd >>= 8;
         }          }
         packet_start(SSH2_MSG_KEXINIT);          packet_start(SSH2_MSG_KEXINIT);
         packet_put_raw(buffer_ptr(&kex->my), buffer_len(&kex->my));          packet_put_raw(buffer_ptr(&kex->my), buffer_len(&kex->my));
Line 293 
Line 293 
                 fatal("no kex alg");                  fatal("no kex alg");
         if (strcmp(k->name, KEX_DH1) == 0) {          if (strcmp(k->name, KEX_DH1) == 0) {
                 k->kex_type = KEX_DH_GRP1_SHA1;                  k->kex_type = KEX_DH_GRP1_SHA1;
           } else if (strcmp(k->name, KEX_DH14) == 0) {
                   k->kex_type = KEX_DH_GRP14_SHA1;
         } else if (strcmp(k->name, KEX_DHGEX) == 0) {          } else if (strcmp(k->name, KEX_DHGEX) == 0) {
                 k->kex_type = KEX_DH_GEX_SHA1;                  k->kex_type = KEX_DH_GEX_SHA1;
         } else          } else
Line 477 
Line 479 
         ret = current_keys[mode];          ret = current_keys[mode];
         current_keys[mode] = NULL;          current_keys[mode] = NULL;
         return ret;          return ret;
   }
   
   void
   derive_ssh1_session_id(BIGNUM *host_modulus, BIGNUM *server_modulus,
       u_int8_t cookie[8], u_int8_t id[16])
   {
           const EVP_MD *evp_md = EVP_md5();
           EVP_MD_CTX md;
           u_int8_t nbuf[2048], obuf[EVP_MAX_MD_SIZE];
           int len;
   
           EVP_DigestInit(&md, evp_md);
   
           len = BN_num_bytes(host_modulus);
           if (len < (512 / 8) || len > sizeof(nbuf))
                   fatal("%s: bad host modulus (len %d)", __func__, len);
           BN_bn2bin(host_modulus, nbuf);
           EVP_DigestUpdate(&md, nbuf, len);
   
           len = BN_num_bytes(server_modulus);
           if (len < (512 / 8) || len > sizeof(nbuf))
                   fatal("%s: bad server modulus (len %d)", __func__, len);
           BN_bn2bin(server_modulus, nbuf);
           EVP_DigestUpdate(&md, nbuf, len);
   
           EVP_DigestUpdate(&md, cookie, 8);
   
           EVP_DigestFinal(&md, obuf, NULL);
           memcpy(id, obuf, 16);
   
           memset(nbuf, 0, sizeof(nbuf));
           memset(obuf, 0, sizeof(obuf));
           memset(&md, 0, sizeof(md));
 }  }
   
 #if defined(DEBUG_KEX) || defined(DEBUG_KEXDH)  #if defined(DEBUG_KEX) || defined(DEBUG_KEXDH)

Legend:
Removed from v.1.56  
changed lines
  Added in v.1.56.2.1