[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.55.2.2 and 1.56

version 1.55.2.2, 2004/08/19 22:37:31 version 1.56, 2003/11/21 11:57:03
Line 148 
Line 148 
 void  void
 kex_send_kexinit(Kex *kex)  kex_send_kexinit(Kex *kex)
 {  {
         u_int32_t rnd = 0;          u_int32_t rand = 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)
                         rnd = arc4random();                          rand = arc4random();
                 cookie[i] = rnd;                  cookie[i] = rand;
                 rnd >>= 8;                  rand >>= 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 479 
Line 477 
         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.55.2.2  
changed lines
  Added in v.1.56