/[rdesktop]/sourceforge.net/trunk/rdesktop/secure.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/secure.c

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

revision 432 by matthewc, Tue Jul 1 09:31:25 2003 UTC revision 540 by astrand, Fri Oct 31 20:34:26 2003 UTC
# Line 34  Line 34 
34  #endif  #endif
35    
36  extern char hostname[16];  extern char hostname[16];
37  extern int width;  extern int g_width;
38  extern int height;  extern int g_height;
39  extern int keylayout;  extern int keylayout;
40  extern BOOL encryption;  extern BOOL g_encryption;
41  extern BOOL g_licence_issued;  extern BOOL g_licence_issued;
42  extern BOOL use_rdp5;  extern BOOL g_use_rdp5;
43  extern int server_bpp;  extern BOOL g_console_session;
44    extern int g_server_bpp;
45  extern uint16 mcs_userid;  extern uint16 mcs_userid;
46  extern VCHANNEL g_channels[];  extern VCHANNEL g_channels[];
47  extern unsigned int g_num_channels;  extern unsigned int g_num_channels;
# Line 57  static uint8 sec_decrypt_update_key[16]; Line 58  static uint8 sec_decrypt_update_key[16];
58  static uint8 sec_encrypt_update_key[16];  static uint8 sec_encrypt_update_key[16];
59  static uint8 sec_crypted_random[SEC_MODULUS_SIZE];  static uint8 sec_crypted_random[SEC_MODULUS_SIZE];
60    
61  uint16 server_rdp_version = 0;  uint16 g_server_rdp_version = 0;
62    
63  /*  /*
64   * General purpose 48-byte transformation, using two 32-byte salts (generally,   * General purpose 48-byte transformation, using two 32-byte salts (generally,
# Line 406  sec_out_mcs_data(STREAM s) Line 407  sec_out_mcs_data(STREAM s)
407          unsigned int i;          unsigned int i;
408    
409          if (g_num_channels > 0)          if (g_num_channels > 0)
410                  length += g_num_channels*12 + 8;                  length += g_num_channels * 12 + 8;
411    
412          if (hostlen > 30)          if (hostlen > 30)
413                  hostlen = 30;                  hostlen = 30;
# Line 430  sec_out_mcs_data(STREAM s) Line 431  sec_out_mcs_data(STREAM s)
431          /* Client information */          /* Client information */
432          out_uint16_le(s, SEC_TAG_CLI_INFO);          out_uint16_le(s, SEC_TAG_CLI_INFO);
433          out_uint16_le(s, 212);  /* length */          out_uint16_le(s, 212);  /* length */
434          out_uint16_le(s, use_rdp5 ? 4 : 1);     /* RDP version. 1 == RDP4, 4 == RDP5. */          out_uint16_le(s, g_use_rdp5 ? 4 : 1);   /* RDP version. 1 == RDP4, 4 == RDP5. */
435          out_uint16_le(s, 8);          out_uint16_le(s, 8);
436          out_uint16_le(s, width);          out_uint16_le(s, g_width);
437          out_uint16_le(s, height);          out_uint16_le(s, g_height);
438          out_uint16_le(s, 0xca01);          out_uint16_le(s, 0xca01);
439          out_uint16_le(s, 0xaa03);          out_uint16_le(s, 0xaa03);
440          out_uint32_le(s, keylayout);          out_uint32_le(s, keylayout);
# Line 448  sec_out_mcs_data(STREAM s) Line 449  sec_out_mcs_data(STREAM s)
449          out_uint32_le(s, 12);          out_uint32_le(s, 12);
450          out_uint8s(s, 64);      /* reserved? 4 + 12 doublewords */          out_uint8s(s, 64);      /* reserved? 4 + 12 doublewords */
451    
452          switch (server_bpp)          switch (g_server_bpp)
453          {          {
454                  case 8:                  case 8:
455                          out_uint16_le(s, 0xca01);                          out_uint16_le(s, 0xca01);
# Line 466  sec_out_mcs_data(STREAM s) Line 467  sec_out_mcs_data(STREAM s)
467          out_uint16_le(s, 1);          out_uint16_le(s, 1);
468    
469          out_uint32(s, 0);          out_uint32(s, 0);
470          out_uint8(s, server_bpp);          out_uint8(s, g_server_bpp);
471          out_uint16_le(s, 0x0700);          out_uint16_le(s, 0x0700);
472          out_uint8(s, 0);          out_uint8(s, 0);
473          out_uint32_le(s, 1);          out_uint32_le(s, 1);
# Line 474  sec_out_mcs_data(STREAM s) Line 475  sec_out_mcs_data(STREAM s)
475    
476          out_uint16_le(s, SEC_TAG_CLI_4);          out_uint16_le(s, SEC_TAG_CLI_4);
477          out_uint16_le(s, 12);          out_uint16_le(s, 12);
478          out_uint32_le(s, 9);          out_uint32_le(s, g_console_session ? 0xb : 9);
479          out_uint32(s, 0);          out_uint32(s, 0);
480    
481          /* Client encryption settings */          /* Client encryption settings */
482          out_uint16_le(s, SEC_TAG_CLI_CRYPT);          out_uint16_le(s, SEC_TAG_CLI_CRYPT);
483          out_uint16_le(s, 12);   /* length */          out_uint16_le(s, 12);   /* length */
484          out_uint32_le(s, encryption ? 0x3 : 0); /* encryption supported, 128-bit supported */          out_uint32_le(s, g_encryption ? 0x3 : 0);       /* encryption supported, 128-bit supported */
485          out_uint32(s, 0);       /* Unknown */          out_uint32(s, 0);       /* Unknown */
486    
487          DEBUG_RDP5(("g_num_channels is %d\n", g_num_channels));          DEBUG_RDP5(("g_num_channels is %d\n", g_num_channels));
# Line 699  sec_process_crypt_info(STREAM s) Line 700  sec_process_crypt_info(STREAM s)
700    
701          DEBUG(("Generating client random\n"));          DEBUG(("Generating client random\n"));
702          /* Generate a client random, and hence determine encryption keys */          /* Generate a client random, and hence determine encryption keys */
703          // This is what the MS client do:          /* This is what the MS client do: */
704          memset(inr, 0, SEC_RANDOM_SIZE);          memset(inr, 0, SEC_RANDOM_SIZE);
705          /*  *ARIGL!* Plaintext attack, anyone?          /*  *ARIGL!* Plaintext attack, anyone?
706             I tried doing:             I tried doing:
# Line 736  sec_process_crypt_info(STREAM s) Line 737  sec_process_crypt_info(STREAM s)
737  static void  static void
738  sec_process_srv_info(STREAM s)  sec_process_srv_info(STREAM s)
739  {  {
740          in_uint16_le(s, server_rdp_version);          in_uint16_le(s, g_server_rdp_version);
741          DEBUG_RDP5(("Server RDP version is %d\n", server_rdp_version));          DEBUG_RDP5(("Server RDP version is %d\n", g_server_rdp_version));
742          if (1 == server_rdp_version)          if (1 == g_server_rdp_version)
743                  use_rdp5 = 0;                  g_use_rdp5 = 0;
744  }  }
745    
746    
# Line 779  sec_process_mcs_data(STREAM s) Line 780  sec_process_mcs_data(STREAM s)
780                          case SEC_TAG_SRV_CHANNELS:                          case SEC_TAG_SRV_CHANNELS:
781                                  /* FIXME: We should parse this information and                                  /* FIXME: We should parse this information and
782                                     use it to map RDP5 channels to MCS                                     use it to map RDP5 channels to MCS
783                                     channels */                                     channels */
784                                  break;                                  break;
785    
786                          default:                          default:
# Line 800  sec_recv(void) Line 801  sec_recv(void)
801    
802          while ((s = mcs_recv(&channel)) != NULL)          while ((s = mcs_recv(&channel)) != NULL)
803          {          {
804                  if (encryption || !g_licence_issued)                  if (g_encryption || !g_licence_issued)
805                  {                  {
806                          in_uint32_le(s, sec_flags);                          in_uint32_le(s, sec_flags);
807    
# Line 843  sec_connect(char *server, char *username Line 844  sec_connect(char *server, char *username
844          if (!mcs_connect(server, &mcs_data, username))          if (!mcs_connect(server, &mcs_data, username))
845                  return False;                  return False;
846    
847          //      sec_process_mcs_data(&mcs_data);          /*      sec_process_mcs_data(&mcs_data); */
848          if (encryption)          if (g_encryption)
849                  sec_establish_key();                  sec_establish_key();
850          xfree(mcs_data.data);          xfree(mcs_data.data);
851          return True;          return True;

Legend:
Removed from v.432  
changed lines
  Added in v.540

  ViewVC Help
Powered by ViewVC 1.1.26