/[rdesktop]/sourceforge.net/trunk/rdesktop/licence.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/licence.c

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

revision 82 by astrand, Tue Jul 30 07:18:48 2002 UTC revision 365 by matthewc, Wed Apr 16 08:19:15 2003 UTC
# Line 1  Line 1 
1  /*  /*
2     rdesktop: A Remote Desktop Protocol client.     rdesktop: A Remote Desktop Protocol client.
3     RDP licensing negotiation     RDP licensing negotiation
4     Copyright (C) Matthew Chapman 1999-2001     Copyright (C) Matthew Chapman 1999-2002
5        
6     This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
# Line 19  Line 19 
19  */  */
20    
21  #include "rdesktop.h"  #include "rdesktop.h"
22    
23    #ifdef WITH_OPENSSL
24    #include <openssl/rc4.h>
25    #else
26  #include "crypto/rc4.h"  #include "crypto/rc4.h"
27    #endif
28    
29  extern char username[16];  extern char username[16];
30  extern char hostname[16];  extern char hostname[16];
 extern BOOL licence;  
31    
32  static uint8 licence_key[16];  static uint8 licence_key[16];
33  static uint8 licence_sign_key[16];  static uint8 licence_sign_key[16];
# Line 120  licence_send_request(uint8 * client_rand Line 124  licence_send_request(uint8 * client_rand
124          out_uint8p(s, rsa_data, SEC_MODULUS_SIZE);          out_uint8p(s, rsa_data, SEC_MODULUS_SIZE);
125          out_uint8s(s, SEC_PADDING_SIZE);          out_uint8s(s, SEC_PADDING_SIZE);
126    
127          out_uint16(s, LICENCE_TAG_USER);          out_uint16_le(s, LICENCE_TAG_USER);
128          out_uint16(s, userlen);          out_uint16_le(s, userlen);
129          out_uint8p(s, user, userlen);          out_uint8p(s, user, userlen);
130    
131          out_uint16(s, LICENCE_TAG_HOST);          out_uint16_le(s, LICENCE_TAG_HOST);
132          out_uint16(s, hostlen);          out_uint16_le(s, hostlen);
133          out_uint8p(s, host, hostlen);          out_uint8p(s, host, hostlen);
134    
135          s_mark_end(s);          s_mark_end(s);
# Line 137  static void Line 141  static void
141  licence_process_demand(STREAM s)  licence_process_demand(STREAM s)
142  {  {
143          uint8 null_data[SEC_MODULUS_SIZE];          uint8 null_data[SEC_MODULUS_SIZE];
         uint8 hwid[LICENCE_HWID_SIZE];  
         uint8 signature[LICENCE_SIGNATURE_SIZE];  
144          uint8 *server_random;          uint8 *server_random;
145            uint8 signature[LICENCE_SIGNATURE_SIZE];
146            uint8 hwid[LICENCE_HWID_SIZE];
147          uint8 *licence_data;          uint8 *licence_data;
148          int licence_size;          int licence_size;
149          RC4_KEY crypt_key;          RC4_KEY crypt_key;
# Line 153  licence_process_demand(STREAM s) Line 157  licence_process_demand(STREAM s)
157          licence_generate_keys(null_data, server_random, null_data);          licence_generate_keys(null_data, server_random, null_data);
158    
159          licence_size = load_licence(&licence_data);          licence_size = load_licence(&licence_data);
160          if (licence_size == -1)          if (licence_size != -1)
161          {          {
162                  licence_send_request(null_data, null_data, username, hostname);                  /* Generate a signature for the HWID buffer */
163                    licence_generate_hwid(hwid);
164                    sec_sign(signature, 16, licence_sign_key, 16, hwid, sizeof(hwid));
165    
166                    /* Now encrypt the HWID */
167                    RC4_set_key(&crypt_key, 16, licence_key);
168                    RC4(&crypt_key, sizeof(hwid), hwid, hwid);
169    
170                    licence_present(null_data, null_data, licence_data, licence_size, hwid, signature);
171                    xfree(licence_data);
172                  return;                  return;
173          }          }
174    
175          /* Generate a signature for the HWID buffer */          licence_send_request(null_data, null_data, username, hostname);
         licence_generate_hwid(hwid);  
         sec_sign(signature, 16, licence_sign_key, 16, hwid, sizeof(hwid));  
   
         /* Now encrypt the HWID */  
         RC4_set_key(&crypt_key, 16, licence_key);  
         RC4(&crypt_key, sizeof(hwid), hwid, hwid);  
   
         licence_present(null_data, null_data, licence_data, licence_size, hwid, signature);  
         xfree(licence_data);  
176  }  }
177    
178  /* Send an authentication response packet */  /* Send an authentication response packet */
# Line 244  licence_process_authreq(STREAM s) Line 248  licence_process_authreq(STREAM s)
248          memcpy(sealed_buffer + LICENCE_TOKEN_SIZE, hwid, LICENCE_HWID_SIZE);          memcpy(sealed_buffer + LICENCE_TOKEN_SIZE, hwid, LICENCE_HWID_SIZE);
249          sec_sign(out_sig, 16, licence_sign_key, 16, sealed_buffer, sizeof(sealed_buffer));          sec_sign(out_sig, 16, licence_sign_key, 16, sealed_buffer, sizeof(sealed_buffer));
250    
         /* Deliberately break signature if licencing disabled */  
         if (!licence)  
                 memset(out_sig, 0, sizeof(out_sig));  
   
251          /* Now encrypt the HWID */          /* Now encrypt the HWID */
252          RC4_set_key(&crypt_key, 16, licence_key);          RC4_set_key(&crypt_key, 16, licence_key);
253          RC4(&crypt_key, LICENCE_HWID_SIZE, hwid, crypt_hwid);          RC4(&crypt_key, LICENCE_HWID_SIZE, hwid, crypt_hwid);
# Line 283  licence_process_issue(STREAM s) Line 283  licence_process_issue(STREAM s)
283  void  void
284  licence_process(STREAM s)  licence_process(STREAM s)
285  {  {
286          uint16 tag;          uint8 tag;
287    
288          in_uint16_le(s, tag);          in_uint8(s, tag);
289          in_uint8s(s, 2);        /* length */          in_uint8s(s, 3);        /* version, length */
290    
291          switch (tag)          switch (tag)
292          {          {
# Line 303  licence_process(STREAM s) Line 303  licence_process(STREAM s)
303                          break;                          break;
304    
305                  case LICENCE_TAG_REISSUE:                  case LICENCE_TAG_REISSUE:
                         break;  
   
306                  case LICENCE_TAG_RESULT:                  case LICENCE_TAG_RESULT:
307                          break;                          break;
308    

Legend:
Removed from v.82  
changed lines
  Added in v.365

  ViewVC Help
Powered by ViewVC 1.1.26