소스 검색

Updating code to PuTTY 50877924

Source commit: eea16d3097e906355b509260bcd007d33c91a8e2
Martin Prikryl 6 년 전
부모
커밋
34f804bd0a
7개의 변경된 파일19개의 추가작업 그리고 35개의 파일을 삭제
  1. 2 2
      source/core/SecureShell.cpp
  2. 2 0
      source/putty/mpint.c
  3. 0 2
      source/putty/ssh.h
  4. 2 0
      source/putty/ssh1login.c
  5. 4 1
      source/putty/ssh2bpp.c
  6. 5 30
      source/putty/sshrand.c
  7. 4 0
      source/putty/sshrsa.c

+ 2 - 2
source/core/SecureShell.cpp

@@ -1856,8 +1856,8 @@ bool __fastcall TSecureShell::EnumNetworkEvents(SOCKET Socket, WSANETWORKEVENTS
   WSANETWORKEVENTS AEvents;
   if (WSAEnumNetworkEvents(Socket, NULL, &AEvents) == 0)
   {
-    noise_ultralight(Socket);
-    noise_ultralight(AEvents.lNetworkEvents);
+    noise_ultralight(NOISE_SOURCE_IOID, Socket);
+    noise_ultralight(NOISE_SOURCE_IOID, AEvents.lNetworkEvents);
 
     Events.lNetworkEvents |= AEvents.lNetworkEvents;
     for (int Index = 0; Index < FD_MAX_EVENTS; Index++)

+ 2 - 0
source/putty/mpint.c

@@ -2440,10 +2440,12 @@ mp_int *mp_random_bits_fn(size_t bits, random_read_fn_t random_read)
     random_read(randbuf, bytes);
     if (bytes)
         randbuf[0] &= (2 << ((bits-1) & 7)) - 1;
+    { // WINSCP
     mp_int *toret = mp_from_bytes_be(make_ptrlen(randbuf, bytes));
     smemclr(randbuf, bytes);
     sfree(randbuf);
     return toret;
+    } // WINSCP
 }
 
 mp_int *mp_random_in_range_fn(mp_int *lo, mp_int *hi, random_read_fn_t rf)

+ 0 - 2
source/putty/ssh.h

@@ -924,8 +924,6 @@ void SHATransform(uint32_t *digest, uint32_t *data);
 #endif
 
 void random_read(void *out, size_t size);
-void random_add_noise(void *noise, int length);
-void random_add_heavynoise(void *noise, int length);
 
 /* Exports from x11fwd.c */
 enum {

+ 2 - 0
source/putty/ssh1login.c

@@ -1006,10 +1006,12 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl)
                 ppl_logevent("Sending length-padded password");
                 pkt = ssh_bpp_new_pktout(s->ppl.bpp, s->pwpkt_type);
                 put_asciz(padded_pw, s->cur_prompt->prompts[0]->result);
+                { // WINSCP
                 size_t pad = 63 & -padded_pw->len;
                 random_read(strbuf_append(padded_pw, pad), pad);
                 put_stringsb(pkt, padded_pw);
                 pq_push(s->ppl.out_pq, pkt);
+                } // WINSCP
             } else {
                 /*
                  * The server is believed unable to cope with

+ 4 - 1
source/putty/ssh2bpp.c

@@ -821,13 +821,16 @@ static void ssh2_bpp_format_packet(struct ssh2_bpp_state *s, PktOut *pkt)
 
             ignore_pkt = ssh2_bpp_new_pktout(SSH2_MSG_IGNORE);
             put_uint32(ignore_pkt, length);
+            { // WINSCP
             size_t origlen = ignore_pkt->length;
-            for (size_t i = 0; i < length; i++)
+            size_t i; // WINSCP
+            for (i = 0; i < length; i++)
                 put_byte(ignore_pkt, 0);  /* make space for random padding */
             random_read(ignore_pkt->data + origlen, length);
             ssh2_bpp_format_packet_inner(s, ignore_pkt);
             bufchain_add(s->bpp.out_raw, ignore_pkt->data, ignore_pkt->length);
             ssh_free_pktout(ignore_pkt);
+            } // WINSCP
         }
     }
 

+ 5 - 30
source/putty/sshrand.c

@@ -48,8 +48,7 @@ int random_active = 0;
 /*
  * Special dummy version of the RNG for use when fuzzing.
  */
-void random_add_noise(void *noise, int length) { }
-void random_add_heavynoise(void *noise, int length) { }
+void random_add_noise(NoiseSourceId source, const void *noise, int length) { }
 void random_ref(void) { }
 void random_unref(void) { }
 void random_read(void *out, size_t size)
@@ -218,7 +217,7 @@ static void random_stir(void)
 #endif
 }
 
-void random_add_noise(void *noise, int length)
+void random_add_noise(NoiseSourceId source, const void *noise, int length)
 {
     unsigned char *p = noise;
     int i;
@@ -334,41 +333,17 @@ void random_unref(void)
 
 void random_read(void *vout, size_t size)
 {
-#ifdef MPEXT
-    int pos;
-
-    assert(random_active);
-
-    pos = pool.poolpos;
-
-    if (pos < sizeof(pool.incoming) || pos >= POOLSIZE)
-    {
-      MPEXT_PUTTY_SECTION_ENTER;
-      if (pool.poolpos >= POOLSIZE)
-      {
-        random_stir();
-      }
-      pos = pool.poolpos;
-      pool.poolpos++;
-      MPEXT_PUTTY_SECTION_LEAVE;
-    }
-    else
-    {
-      pool.poolpos++;
-    }
-
-    return pool.pool[pos];
-#else
-    assert(random_active);
+    pinitassert(random_active);
 
     uint8_t *out = (uint8_t *)vout;
+    MPEXT_PUTTY_SECTION_ENTER;
     while (size-- > 0) {
         if (pool.poolpos >= POOLSIZE)
             random_stir();
 
         *out++ = pool.pool[pool.poolpos++];
     }
-#endif
+    MPEXT_PUTTY_SECTION_LEAVE;
 }
 
 void random_get_savedata(void **data, int *len)

+ 4 - 0
source/putty/sshrsa.c

@@ -56,6 +56,7 @@ bool rsa_ssh1_encrypt(unsigned char *data, int length, RSAKey *key)
     data[0] = 0;
     data[1] = 2;
 
+    { // WINSCP
     size_t npad = key->bytes - length - 3;
     /*
      * Generate a sequence of nonzero padding bytes. We do this in a
@@ -81,10 +82,12 @@ bool rsa_ssh1_encrypt(unsigned char *data, int length, RSAKey *key)
     mp_free(tmp);
     for (i = 2; i < key->bytes - length - 1; i++) {
         mp_mul_integer_into(randval, randval, 255);
+        { // WINSCP
         uint8_t byte = mp_get_byte(randval, random_bits / 8);
         assert(byte != 255);
         data[i] = byte + 1;
         mp_reduce_mod_2to(randval, random_bits);
+        } // WINSCP
     }
     mp_free(randval);
     data[key->bytes - length - 1] = 0;
@@ -102,6 +105,7 @@ bool rsa_ssh1_encrypt(unsigned char *data, int length, RSAKey *key)
     mp_free(b2);
 
     return true;
+    } // WINSCP
 }
 
 /*